web-dev-qa-db-ja.com

悪意のあるコードがないことを確認するために、オープンソースコードで何を検索しますか?

答えは言語固有のものになると思いますが、Githubで何かをチェックアウトするときにどのような用語を探すのか知りたいです。クライアントで使用できるリモート管理ツールを探していたところ、たまたま「ウイルス」である素晴らしいツールを見つけました

https://github.com/rsmudge/vncdll (metasploitに関連付けられている)、またはQuasarRATプロジェクトを例にとります。 https://github.com/quasar/QuasarRAT

今では、SolarWinds MSP ConnectやDamewareなどのエンタープライズ向けの高額なツールを見て、ほとんど同じことを行っていますが、QuasarRATをコンパイルしようとすると、ウイルスとして表示されます。

QuasarRATプログラムを分解し、各機能をプラグインにセグメント化し、悪意のあるものだけを削除するというアイデアで遊んでいましたが、それでもウイルスとしてリストされないのかどうかわかりません。

PHPでは、base64_decode()、exec()などを使用して難読化されたコードを探しますが、C#、C++ C、 Bash-具体的には、キーロギング、リモートホストへのデータの送信、またはコンピューターへの追加のダウンロードを含む可能性のあるものですか?

私が考えることができるものは、TcpListener、AcceptTcpClient、ストリーム、バインド、ソケット、http、wget、curl、ftp、ssh、rsyncです。私はC++、Cに堪能ではないので、BashとC#でさらに学ぶべきことがわかっているので、皆さんが見つけたと人々が隠した楽しいイースターエッグの提案が大好きです。

これらの用語が使用されているからといって、それがIS悪意のあるものであるとは限りません。それを呼び出し、それが承認されているかどうか。

良いリストを一緒に取得できる場合は、自動的に一致を検索してレビュー用に戻すスクリプトを考えます。

3
Alan

Gitリポジトリに悪意のあるコードが含まれていないことを100%確実にしたい場合は、自分で作成してください。それ以外は困難な戦いになります。

誰かが本当に悪意のあるコードを真っ直ぐに隠そうとしているのなら、おそらくそれに気付かないでしょう。たとえば、悪名高い Linuxカーネルの2003ほぼバックドア の場合、この無害なコードは次のとおりです。

if ((options == (__WCLONE|__WALL)) && (current->uid == 0))
    retval = -EINVAL;

次のようにバックドアになりました:

if ((options == (__WCLONE|__WALL)) && (current->uid = 0))
    retval = -EINVAL;

(ヒント:rootであるかどうかを確認する代わりにuid == 0、それはあなたをルートに変えるuid = 0。フラグを渡す_WCLONE|_WALLこれはBAMと呼ばれるシステムコールです。あなたは今ルートです。)

この例は直接関係ありませんが、C/C++の悪意のあるコードはreally微妙である可能性があることを示しています。したがって、誰かがコードでかくれんぼゲームをしている可能性があると思われる場合は、先に進んで別のプロジェクトを見つけてください。


私はよく、「このオープンソースライブラリ/ツールは使用しても大丈夫ですか?」という質問のよりソフトなバージョンを扱います。私のアプローチは、評判が良いかどうかを確認することです。積極的に維持されていますか?彼らのgithubチケットは、彼らが適切な開発プロセスに従っているような印象を与えますか?彼らはセキュリティ修正を含む定期的な変更ログを公開していますか?それに対する未解決のCVEはありますか?バイナリがある場合、それらは適切にコード署名されていますか?

これは絶対に確実なことではありませんが、種をまくプロジェクトを取り除きます。 (もし誰かがオープンソースプロジェクトを審査するより良い方法を持っているなら、私は提案が大好きです!)

5
Mike Ounsworth