実行可能ファイルを監査して、悪意がないことを確認するにはどうすればよいですか?


10

仮想マシンなど、分離された環境で実行可能ファイルを実行するためのツールや手法があるかどうか疑問に思いました。プログラムの実行中に、アプリケーションを監査できるようにしたいのです。つまり、実行可能ファイルが実行しているすべてのこと(ファイルおよびネットワークアクセス)を確認できます。

そうすることで、実行可能ファイルが悪意のあるものであるかどうか、つまり、実行できない操作(ファイルの読み取り/書き込み、ネットワークポートのリッスン/接続など)を実行できるかどうかを確認できます。

グラフィカルインターフェイスがあれば気になりません。


2
@EliahKagan:私が質問を正しく理解している場合、OPは「実行可能ファイルが実行しているすべてのことを確認できる(ツール)を要求します」-実行できsandbox somebinary、架空のsandboxプログラムがすべてのファイルのsomebinary読み取りまたは書き込みをログに記録すると想像してください。接続されているIP /ポート、データ転送など。これは便利なことです。このようなものが存在するかどうかも知りたいです(実際、そのようなツールがVMで実行されているプログラムを監視しなければ、無意味です。とにかくそれが何をするかを言うことはできません)。良い質問。
セルゲイ2013年

2
以前に尋ねたUL.SEに関する関連質問:プロセスの開かれたファイルをリアルタイムで監視するにはどうすればよいですか?(ファイルだけでなく、ネットワークについても)それが起こっているのを見ると、すでに損傷が発生していることを覚えておいてください。
gertvdijk 2013年

2
meta.askubuntu.com/questions/5871/…-この質問を閉じることに関して、メタに関する質問をしました。
セルゲイ2013年

回答:


10

内部で実行可能ファイルを実行するツールまたは仮想マシンです

はい、これはアプリケーションの仮想化と呼ばれます

LXC(Linux Containers)は、これを設定するために一般的に使用されるツールです。これにより、このアプリケーション用に完全に分離されたネットワークをセットアップし、chrootのように一種の仮想マシンに「サンドボックス化」することができます。これは主にセキュリティの目的( "刑務所")のためであり、実際には監査のためではありません。

完全なLXCコンテナと、それを正確に監査する方法を説明することは、質問の範囲を少し超えていると思います。ただし、以下に開始方法について少し説明します。

プログラムの実行中に、実行可能ファイルが実行しているすべてのこと(ファイルおよびネットワークアクセス)を確認できるようにしたいと考えています。

これを使用straceして達成することができ、私はUnix&Linuxで同じ質問をしました:

答えが、それは基本的にダウンしています

strace -t -e trace=open,close,read,getdents,write,connect,accept command-here

重要:いったんそれが起こっているのを見ると、すでに損傷が発生しています。


LXC アプリケーションコンテナー

この記事から。それは次のようになります:

  1. lxc-macvlan.conf 設定ファイル:

    # example as found on /usr/share/doc/lxc/examples/lxc-macvlan.conf
    # Container with network virtualized using the macvlan device driver
    lxc.utsname = alpha
    lxc.network.type = macvlan
    lxc.network.flags = up
    lxc.network.link = eth0 # or eth2 or any of your NICs
    lxc.network.hwaddr = 4a:49:43:49:79:bd
    lxc.network.ipv4 = 0.0.0.0/24
    
  2. を使用して開始しlxc-executeます。

    sudo lxc-execute -n bash-test2 -f lxc-macvlan.conf /bin/bash
    

LXCはシステムとアプリケーションの両方のタイプのコンテナーを提供することに注意してください。ここでアプリケーションコンテナを探しています。


1
LXCはまだ準備ができておらず、現在安全ではありません。たとえば、/sysは仮想化されておらず/sys、コンテナから行われた変更/sysはホストのに対して行われます。Webでクイック検索を行うと、コンテナから「エスケープ」する方法を説明する記事がいくつかあります。LXCは問題の良い解決策ですが、現在はそうではなく、セキュリティツールとして使用すべきではありません。
Andrea Corbellini、2013年

1
ちなみに、投稿された設定例はlxc.mountオプションを利用していません。これは、実行可能ファイルの実行によってユーザーのファイルシステム全体にアクセスできることを意味します。
Andrea Corbellini、2013年

10

探しているのは、プログラムがシステム(具体的にはカーネル)と対話する方法を示すツールです。プログラムは、syscallsを使用してシステムと対話します。syscallの例は次のとおりです。

  • open -ファイルを開くために使用されます。
  • read そして write -ファイル記述子の読み取り/書き込みに使用されます。
  • connect -ソケットをピアに接続するために使用されます。
  • 他にもたくさんあります(を参照man syscalls)。

重要なのは、syscallはを使用してトレースできることptrace(2)です。つまり、基本的には、周辺に構築されたツールを探していますptrace。そのようなツールの1つはですstrace(1)。これは、コマンドを引数として取り、出力するターミナルアプリケーションです。

  • プログラムが呼び出しているシステム呼び出し。
  • syscallsを作成するために使用される引数。
  • syscallの結果。

出力はC形式です。次に例を示します。

$ strace cat test
execve("/bin/cat", ["cat", "test"], [/* 55 vars */]) = 0
/* ... */
open("test", O_RDONLY)                 = 3
/* ... */
read(3, "hello\n", 32768)               = 6
write(1, "hello\n", 6)                  = 6
read(3, "", 32768)                      = 0
/* ... */

そこにcat test、という名前のファイルを開いて、testその内容を読み取っています(hello)をて、標準出力に配置しているます。

straceは多くの出力を生成する可能性があるので、そのmanページ(man strace)、特に-e興味のあるsyscallだけを表示できる出力のドキュメントを必ずお読みください。

残念ながら、私はグラフィカルな方法や使いやすい方法を知りません。それらを探したい場合ptraceは、検索キーワードの1つである必要があります。


分離については、そこに多くの技術があります。Chroots、Linuxコンテナ(現在開発中、不完全)、ソフトウェア仮想化、準仮想化が最も使用されています。ただし、これは議論するには大きすぎるトピックです。詳細を知りたい場合は、新しい質問を開くことをお勧めします。


5

見てくださいAppArmorのを。実行可能ファイルの制限付きプロファイルを追加して、アクションを許可するがログに記録される「苦情」モードに入れることができます。これは、要件を満たしていると思います。

ただし、これだけでは十分ではないことに注意してください。巧妙な悪意のあるバイナリは、監視されていることを検出し、監視されていない場合を除いて、悪意のあるアクションを実行しない可能性があります。

AppArmorはこれよりもさらに進んでおり、承認された操作のみにアプリケーションを永久に制限することができます。Ubuntu Software Centerに含まれるアプリには、AppArmorプロファイルが付属しています。


5

あなたが特定したように、特に実行可能ファイルが最初から悪意があると信じる理由がある場合は特に、仮想マシンは分離を提供する方が良いでしょう。しかし、仮想化プラットフォーム(ハードウェアとソフトウェアの両方)の脆弱性が悪意のあるコードに悪用されて発生する可能性があるため、これでも完璧ではありません。次に、実際の仮想化の脆弱性の例を示します。http//www.kb.cert.org/vuls/id/649219


1

スナップを作成できます

スナップは「セキュリティメカニズムを通じてOSや他のアプリから制限されますが、ユーザーとOSのデフォルトで制御されるきめ細かなポリシーに従って、他のスナップとコンテンツや機能を交換できます。」(http://snapcraft.io/docs/snaps/introから)

これらは、AppArmorに加えて、たとえばseccompを使用してさらに分離します。

さらに、スナップは自己完結型であるため、システムでの配布とアトミックな更新を簡単に行うことができます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.