POSIXシステムで、実行不可で読み取り専用のファイル(別名モード444)がマシンで悪意のあるコードを実行する可能性はありますか?
もしそうなら、それがどのように行われるかを説明できますか?
はい、何かを実行する必要があります。 Xフラグは、シェルが直接実行できることをシェルに示唆しますが、他のプログラムがその方法を知っていても、実行を停止しません。
たとえば、シェルで実行できないファイルa.sh
がある場合、bash a.sh
を呼び出すことで実行できます(これにより、bash
に明示的に実行するように指示します)。実行可能ファイルa.py
がある場合は、python a.py
を呼び出して実行できます。 OSにバイナリELFファイルを実行するように指示する方法もあると思いますが、手元にあるコマンドがわかりません。
また、悪意のあるコードを実行させるために特に何もする必要のないクラスもあります。特にPDFおよびAdobe Flashファイルには、悪意のあるコードを実行するためにファイルを読み取るという単純な行為を可能にするいくつかの既知のホールがありました。特定の場所で自動実行されるファイルもあります(特にWindowsの場合)。また、ファイルが圧縮されている場合は、解凍用のバッファオーバーフローウイルスが含まれている可能性があります。このファイルは、ファイルシステムの未知のバグまたは他の本当に低レベルの何かを利用して、さらに悪質になる可能性もあります。
結論:何かがコンピュータに感染しないことを保証する唯一の方法は、何も何もしないことです。
次の内容を含むファイルmyscriptがあるとします。
#!/bin/bash
echo "Hello, World!"
このファイルを実行可能にして./myscriptで実行すると、カーネルは最初の2バイトが#!であることを確認します。これは、スクリプトファイルであることを意味します。その後、カーネルは残りの行をインタープリターとして使用し、最初の引数としてファイルを渡します。したがって、実行されます:
/bin/bash myscript
bashはファイルを読み取り、それに含まれるコマンドを実行します。実行ビットが設定されていないファイルを実行する別の方法は次のとおりです。
#. myscript
ドット、スペース、ファイル名の順。
したがって、bash(またはスクリプトで必要なインタプリタ)がスクリプトを「実行」するには、ファイルを読み取ることができれば十分です。
したがって、スクリプトの場合、実行ビットを使用すると、実行が少し便利になります。 bashが実行可能である限り、スクリプトファイルを引数としていつでもbashを実行できます
これは、すべての回答に示されている他の例のようなスクリプトだけに当てはまるわけではありません。基本的に、ファイルを読み取るソフトウェアにバグがある場合、すべてのファイルは、非常に広範囲の手法(オーバーフロー、メモリ破損、恣意的なソフトウェア実行...)を使用した悪意のあるコード実行のベクターです。例:
ファイル自体は、そこに座っているだけでは危険ではありません。しかし、プログラムによっては読み取ろうとするため、問題が発生する可能性があります。また、ファイルを読み取ることができる場合は、コピーすることができます。したがって、コピーして実行可能ファイルに名前を変更できます。
たとえば、DOS/Windowsを使用していて、something.txtというファイルがあり、それをsomething.batというファイルにコピーすると、実行できるようになります。
HTMLファイル(またはhtmlコンテンツ)と言った場合、それをブラウザーに読み込むことができます。ブラウザーにJavascriptの脆弱性がある場合、そのプログラムは害を及ぼす可能性があります。
理論的には、ファイルがそこに座っているだけでも危険です。ファイルシステムのファイルアロケーションテーブル(FAT)に問題があり、プログラムを実行している場合、不適切な断片化により、悪意のある場所にジャンプする可能性があります。ファイルはそのようなコードです。一部のオペレーティングシステムでのこの種のアクションは、バッファオーバーフローを介して実行できます。
はい、できます。バイナリの典型的な例は、以下の例のようにELFインタープリターを使用することです。
$ cp /bin/ls /tmp/ls
$ chmod a-x /tmp/ls
$ /lib/ld-linux.so.2 /tmp/ls
またはx86-64システムの場合:
$ /lib64/ld-linux-x86-64.so.2 /tmp/ls
シェルスクリプトについても同様です。
$ echo "#!/bin/bash" > /tmp/hello
$ echo "echo 'hello world" >> /tmp/hello
$ bash /tmp/hello
これらは、私たちが整理整頓する必要があると考える新しい監査人、リスク管理者、またはセキュリティ担当者がいる場合の基本的な例です。他の人が述べたように他のエスカレーションパスも制限するため、これを解決してLinuxシステム上のSELinuxのパスに進みます。