3月4日に開催された「第23回北海道情報セキュリティ勉強会」に参加しました。
話題は不正プログラムの解析とメモリフォレンジックについて。どちらも普段仕事で関わることのない分野でしたがとても興味深い内容でした。
Session.1 フリーツールを用いた x86 プログラム解析
トレンドマイクロ株式会社 花岡弥生さんのお話。
不正プログラムを解析する際のポイント、方法について。
攻撃者には、目的がある
- 詐欺・窃盗(情報、金銭)
- 遠隔操作
- 破壊
- 愉快犯
攻撃者の目的は何か?目的から考えると、どのように攻めるのが一番効率が良いか?を攻撃者の視点で考える。
なぜなら不正プログラムには必ず「攻撃者の意図」が含まれてくるから。
解析する段階で攻撃者の目的から絞ることで、ある程度目標を絞ることができる。
一刻も早いレスポンスが必要な場面において、目的からアプローチすることも重要になってくる。
実際に不正プログラムを動かして調べる「動的解析」
プログラム解析の種類は主に次の3種類。
- 表層解析
– プログラムを実行せずに特徴を調査する - 動的解析
– デバッガで実際に動作させる
– 感染してもいいような環境を用意しておいて、動作を確認する
– 実行OSのバージョンが限定されていたりすると現象が起こらない - 静的解析
– 逆アセンブル、逆コンパイルしてコードレベルで機能をみていくもの
– プログラムを全体的・俯瞰的に確認することができる
– OSに依存しない
– 難易度は高い
動的解析では、自分の目線で、攻撃者の目的達成手段のためにはどのような命令文が必要かを考えながら、使用されているAPIを解析していくそうです。
情報窃盗が目的の場合、ポイントになるAPIは次のようなものでした。
- ファイルの作成・複製・削除 に関するもの Kernel32.dll
- 外部と通信するもの ws2_32.dll, wininet.dll
- レジストリへアクセスするもの advapi32.dll
- サービスに関連するもの(なるべくばれないように居続けるため自身をService化している可能性)
プログラムを実際にデバッグしながら動作させることのできるデバッガツールである、Immunity Debugger や OllyDbg を使うことでスムーズに解析を行っていました。
今回は、Immunity Debugger や OllyDbgの使用法も合わせて説明してくださったのですが、OS Xに対応しているツールじゃなかったので試すことはできませんでした。
こうして手を動かしてプログラムを解析しつつ、他の手法と掛け合わせながら目的と対処方法を探っていくことが重要とのこと。
トレンドマイクロ株式会社では、たくさんのチームに分かれて一つの問題を様々な手法で解析しながら問題解決に取り組んでいるとのことでした。
理論的に問題点にたどり着いていく方法だけじゃなく(ホワイトボックス的手法←造語)、自分の中の違和感を絞り込んでいき、現象が発生している箇所を突き止める(ブラックボックス的手法←造語)アプローチも重要なのですね。
両面からアプローチしていくのが最強。
プログラムのバグ調査の、怪しい場所にあたりをつけるのと似ているところがあるような気がする #secpolo
— オム子( °⊿°) (@irasally) March 5, 2016
Session.2 Volatility Framework を使ったメモリフォレンジックス
Volatility Frameworkを使用し、実際にメモリダンプを解析して不正プログラムを見つけ出すというハンズオン形式のセッションです。
講師はトレンドマイクロ株式会社 平原伸昭さん。
第21回せきゅぽろでお話していた「己を知り、敵を知れば百戦危うからず」の話が繰り返し出てきたこともあり、前回のセッションの発展形としてスムーズに話に入ることが出来ました。
今回は事前にVolatility Frameworkをインストールし、配布されたメモリダンプもダウンロードしてハンズオンに臨みました。
Volatility Frameworkのダウンロードページから「Volatility 2.5 Mac OS X Standalone Executables」をダウンロード。
pathが通っている/user/local/bin にコピーして準備完了です。
(ディレクトリがここであってたのかはわからない)
怪しいプログラムを特定するまでの流れ
- –profile 指定するためにまずは image infoを取得。
volatility_2.5_mac -f zeus.vmem imageinfo
- – imageinfoでプロファイルがわかったらプロセスを調べる。
volatility_2.5_mac -f zeus.vmem --profile=WinXPSP2x86 pstree
- プロセスに異常はなかったので、コネクションを調べる。
volatility_2.5_mac -f zeus.vmem --profile=WinXPSP2x86 connections
- – 現在接続中のコネクションはなかったので、過去の接続履歴を確認
volatility_2.5_mac -f zeus.vmem --profile=WinXPSP2x86 connscan
- 怪しいIPアドレスが接続履歴から出てきたので調べる
http://www.ipvoid.com/ - 怪しいIPにデータを送っているプロセスを調べる
volatility_2.5_mac -f zeus.vmem --profile=WinXPSP2x86 malfind -p 856 --dump-dir=output
※dumpしたらウィルス扱いされるので注意
- 怪しいファイルがdumpされた
https://www.virustotal.com で調べる。
プロセスインジェクション(正しいプロセスの中に悪いプロセスを注入した)という手法で注入された不正プログラムを見つけ出す事ができました!
サンプルだけあって、すごくスムーズに原因に辿りつけておもしろかったです。
セッションでもお話されていましたが、現実にはこんなにスムーズに見つけられることはないのだろうなあ。
Volatility Frameworkの解析威力はすごい、ということが体験できたのがよかったです。
セッションでは、ハンズオンで使用した他にも有用なプラグインをいくつか紹介してもらいました。
ウイルスが混入しているメモリダンプを解析して、怪しいプロセスのdumpを取り出したら、即座にウィルス対策ソフトによってdumpが消されて行っている模様、私はOS X だからか反応しない #secpolo
— オム子( °⊿°) (@irasally) March 5, 2016
正しい状態を知ることの重要性
今回も何度もこのお話が出てきました。
どの状態が正しいのかを知っておかないと、おかしいことに気がつけない。
日々の仕事の中でもこの視点はとても重要。
常に心がけていきたい。
Session.3 北大キャンパスネットワークと私
北海道大学 情報基盤センター サイバーセキュリティ研究部門 南弘征 先生によるミニセッション。
何をやるにもネットワークが必要、さらに技術の発展によりデータ量がどんどん増えている昨今、大規模ネットワークのセキュリティ管理はとても大変なのだということが伝わりました。
利便性とセキュリティとのバランスはどの世界でも発生する問題。
今回は「管理する側」の話がメインでしたが「管理される側」や「管理に関わる業者」の立場だと、また違った角度から問題があるのだろうなあと思いました。
おやつ
ろまん亭。美味しかったです!
おやつタイム #secpolo pic.twitter.com/AvXdsg1hhp
— オム子( °⊿°) (@irasally) March 5, 2016