切られたしっぽ

産業廃棄物の投下場所

ノンペンテスターの OSEP 合格体験記 (2022/10)

はじめに

2022年10月 に OSEP という中級(?)ペネトレーションテスター向けの資格に合格しました。

私はブルーチーム寄りの開発チームに所属しているのでペネトレーションテストは専門外ですが、それでも知見として有益なものが非常に多い内容でした。
もし私のように「レッドチームではないけど受講を考えている」人がいれば参考にしていただければと思います。

What is OSEP & PEN-300 ??

OSEP とは Offensive Security Experienced Penetration Tester の略で、巷でブームとなっている OSCP ( Offensive Security Certified Professional ) より一段上位に位置するペネトレーションテスター向けの資格です。

www.offensive-security.com


上位とは書きましたが、では具体的にOSCPと何が異なるかというと

  • AntiVirus ソフトなどに対する検知回避技術
  • 企業ネットワーク環境を想定した侵害

への理解が求められるのが大きな違いです。OSCP やその他一般のペネトレーションテスト学習サービスの場合、ハンズオンのために用意される環境というのはマシン1台でそれのroot shellを取得することが目標というのが多いです。そして、内部のマシンはWindows DefenderやAnti-Virusなどが導入されていないノーガードなマシンが大半です。しかし現実の企業環境はそうではありません。一つのマシンを完全に侵害した後はより侵害する価値のあるマシンへ攻撃者は移っていきますし、もちろん Anti-Virus ソフトウェアが導入されている企業も多いです。ソフトウェアアップデートも行っているためメジャーな脆弱性も簡単には刺さらないでしょう。このようなより実践的な環境で検知機能を掻い潜り、ネットワーク全体の侵害を目指すというのがこのOSEPという資格のメインテーマとなっています。これはOSEPのためのトレーニング PEN-300 のコース名が『Evasion Techniques and Breaching Defenses』となっていることからも間違ってはいないと思っています。

そのため、HackTheBox の Easy box のノリで作成した meterpreter 製 reverse shell file や権限昇格の調査に使う winPEAS なんてそのままuploadすればすぐに検知されてしまいます。これらの既存のツールに頼り切るのではなく、自分で脆弱性やexploitの原理を学び、コードを書き、実際にターゲットマシンを侵害するための手法を学ぶことができるのがこのPEN-300コースです。

なお、PEN-300 で学ぶ Evasion の対象は、以下のような自動化された検知メカニズムを対象としています。

そのため、ログ分析や脅威ハンティングと言った ブルーチームの人間による検知を回避する ことまでは対象としていません。トレーニングで紹介されている手法をそのまま使用するとすぐにEDRやSIEMでのクエリに引っかかってしまうということは十分あります。しかし、PEN-300 のトレーニングにはAntiVirus/アプリケーションホワイトリスト/Windowsイベントログが導入された検証用Windowsマシンが用意されているため、『イベントログレベルまでevasionしてやるぞ!!』というモチベーションのある人はここまで拘ったexploitの検証をすることもできます。私はブルーチーム寄りの人間なので、『自分が作ったexploitがイベントログとしてどう見えるのか』 =>『ではイベントログから消すにはどうしたらいいか』 => 『消えたけど何かオプションを有効にすることで検知できる手法はないか』とあれこれ試行錯誤しながらトレーニングを楽しんでいました。自由に疑似企業環境を触れる機会なんて滅多にないので、非常に有意義な時間だったと思います。

Examination & How to pass

正直なところ、試験の詳細やトレーニング内部で扱っているラボの内容、きちんと学んだ方がいい内容については先人の素晴らしい方々がブログにて説明してくれているのでそちらを見ていただいたほうがいいかなと思います。

GkKeeg さん『完全未経験の文系事務員がOSEPを取得するまで』
qiita.com

おまどん さん 『OSEP: OSCPの続編的な資格を取った話』
ommadawn46.hatenablog.com

yuyuyu_sec さん『OSEP受験記』
yuyuyu-sec.hateblo.jp


自分が書いても二番煎じだと思うので、いくつか自分なりのポイントをまとめます。

試験基本

前節に書いた通り、OSEP は企業ネットワークを模した環境のペネトレーションテストの資格なので、試験も実際の企業を模した大規模ネットワーク環境で構成されています。用意されているマシンの数は多いですが入り口は限られているので、企業ネットワークへの侵入口を見つけてそこを足場としながら横展開を繰り返し、最も価値のあるマシンへ向かって進んでいくことになります。
そのため、試験時間もとにかく長く、

  • 47時間45分の実技試験
  • 実技試験終了後 24時間以内のレポーティング

という約72時間ぶっ続けの試験となります。正直なところ、しばらくshellが取れないと頭がおかしくなりかけます。当たり前ですが試験中に"寝たいです!!"とチャットで提言すれば仮眠もできるので、詰まったら潔く横になりましょう。自分は合格点に達するまでは緊張から横になっても一睡もできませんでしたが、安全圏に入ると7時間ほど寝られました。

合格要件

OSEP 試験は、以下のいずれかの条件を満たした場合に合格できます。

  • local.txt, proof.txt という、企業ネットワーク内部の端末を侵害すると得られるスコアを合計100ポイント以上になるまで取得する
  • secret.txt という、企業ネットワーク内部で最も価値のあるマシンを侵害すると得られる情報を提出する

侵入口から secret.txt を入手するためのパスは複数存在しますが、secret.txt を取得できそうにない場合は100ポイント以上獲得するために複数のパスからの攻略を試す必要があります。
自分は当初「絶対にsecretをとってやるぞ!!」という意気込みで受けましたが、試験開始24時間経過後くらいにその手前で詰まってしまい、焦りや精神的な辛さからプライドを捨てて別のパスを探して攻略を行い結局100ポイント以上獲得の方で合格しました。

secret.txt 獲得の直前までに17時間かかったので、早々にプライドを捨てていれば約19時間で合格点には達せたかなと思います。一番時間を要したのは入り口で、入り口から足場を築くまでに10時間を要して本当に気が狂いそうになりました。自分はOSCPの実技試験を7時間で終えたので正直OSEPを舐め腐っていたのですが、そのバチが当たったかなと思っています。そのあとは順調に進み、自分が見えている範囲でマシンが残り2台というところで時間切れになりました。なので、複数あるパスの一つで詰まったときはプライドを捨てて別ルートに進んだほうが精神衛生上いいですしオススメです。

最後に、これらのスコアとして計上するテキストファイルはスクリーンショットを取得のうえレポートに添付して提出する必要があるのですが、RDP でのスクショはNGということだけは注意してください。せっかくshellを取得してもスコアとして計上されなくなってしまうので、面倒ですがここからさらにmeterpreter shellを接続させたりimpacket-psexecを使用したりしましょう。詳しくは公式を確認してください。

help.offensive-security.com

勉強方法やツール

これに関しても試験を受けた方々がすでに語られていますが、本試験を合格するだけならば「全18章構成のトレーニングマテリアルを自分の頭の中できちんと理解できるまでやりこみ、6つ用意されている企業模擬環境のLabを『完全に理解した』 状態になるまで取り組む」ことが一番地道でありながら近道なんじゃないかなと思います。

前節で紹介したおまどんさんの合格体験記によると、OSEPの試験は2021年11月の新形式から難易度が上がったらしく、いわゆる「素直」な問題ではなくなったらしいです。確かに自分も「トレーニングマテリアルに載っているやり方をそのままやるだけでは無理だな」と思う場面に試験中何回か遭遇しましたし、そもそも全く書かれていないexploit vectorを自分でググって探してくる作業もありました。しかし、既存のツールに頼り切ったenum., exploitをするのではなく、泥臭いenum.をしたり、「exploit が成功しないのではなく検知されてしまっているのでは?」と仮説を立てたときにすぐに手が動く下地を作れていれば問題ないんじゃないかなと思います。この下地はトレーニングマテリアルを丁寧にやっていればできていくはずなので、「難しくて何もわからん」となっても焦らず丁寧にやっていきましょう。1章ずつ丁寧にやっていけば、自分のようなnoobでも自作できるexploit toolの幅は広がっていきます。意地の悪い書き方をするならば、「試験ですぐ使用できるような自作の検知回避用ツールをどれだけで準備できるか」で心の安泰が異なりますし、Windows やそれに伴うAnti-Virusソフトの仕組みへの理解につながるんじゃないかなと思います。例えば、以下のような事項に対して自作のツールがすぐに出てくれば準備としてはOKですし、ダメならば試験までの準備が足りないのではないかと思われます。

  • AMSI (Anti Malware Scan Interface) に検知されてしまうので、AMSIをbypassできる powershell コードを実装する
  • AppLocker ( アプリケーションホワイトリスト) に実行制御されてしまうので、bypass して任意コードを実行するコードを実装する
  • PsExec を使用して横展開したいが検知されてしまうので、Windows から Fileless lateral movement するコード(DCE/RPC インターフェースを触ってサービスコトロールマネージャからサービスの実行)を実装できる
  • mimikatz の実行ファイルが検知されてしまいpowershellのログも残したくないので、自作でlsassのメモリを触りパスワードをダンプするコードを実装する
  • PrintSpoofer を使って権限昇格をしたいが検知されてしまうので、printerbug と pipe を利用してSYSTEMアカウントを偽装したプロセスを生成する (超重要)


とまぁ人をビビらせるようなことを書きましたが、コードの雛形は有志の方がGithubに公開してくれています。以下のプロジェクトを参考に仕組みを理解し、必要な部分のコードを埋められるようになりましょう。

github.com

ここまでは主に Evasion のためのテクニックについて書きましたが、企業ネットワークに対して横展開を進めていくためにはWindows Active Directoryの知識もたいへん重要になります。詳細はトレーニングマテリアルの12章あたりから書かれているため個別に別途教材を買って学ぶ必要はないと思いますが、「Zerologonの脆弱性使ってEasy Win」なんてことはあるはずがなく設定不備や過剰な権限を利用していくことになるため、exploitation に使える材料は揃えておいたほうが良いでしょう。私は以下のプロジェクトをよく参考にしていました。

github.com


そして、Active Directory 環境のenum.で欠かせないツールとして BloodHound がありますがこちらはトレーニングマテリアルで紹介してくれていません。あるとないとではenum.に雲泥の差がでるので、Labで使い方を学んでおきましょう。きっと試験でも役立ちます。しかし、便利だからといってBloodHoundに頼りすぎると試験で痛い目を見ると思うので、手動のenum.方法もきちんと学んでおくことをオススメします。これは、OSCPにおけるautoreconの立ち位置と同じですね。

github.com


最後に自分の勉強方法について軽く紹介します。自分はトレーニングのエクササイズ全部を1周、Labを2周して自作のチートシートを2週間くらいかけて作り試験に臨みました。チートシートは以下のような感じで、自分の知識を全てダンプしたものをHackMDに残しておいて困ったときに検索できる状態となっています。

自作チートシート


別にチートシートを作る必要はないのですが、自分の場合これをすると知識の整理ができるのでOSCPのときも同じやり方を取りました。チートシートは試験時間中半分くらいしか使わなかったのですが、HackTheBoxなどをやっていて時々起こる「方針が何も分からなくてただただ Google 検索しているだけで時間が過ぎていってしまう状態」があまり訪れなかったのでよかったのではないかと自己評価しています。

PEN-300受講のススメとトレーニングから得られるもの

顧客ロイヤリティを測る指標としてNPSというものがありますが、NPS風に「あなたはPEN-300を他人に勧めたいと思いますか?」という視点から本研修を振り返ってみると、おそらく10をつけるのではないかなと思います。お勧めする対象は、オフェンシブ/ディフェンシブ/オペレーションを担当しているエンジニア全てです。ここまで幅広い対象に対して強くオススメするのには理由があり、PEN-300を通して学べるものにはぱっと思いつくだけでも以下のようなものがあります。

  • 「AntiVirusだけだとなぜ防御ができないのか」に対して具体的な理解をすることができる
  • 攻撃者が侵入後にどのようなツールを使用して調査をするのか、痕跡としてどのようなイベントログが残るのか、イベントログを出さずに調査できる手法としてどのようなものがあるかを知ることができる
  • 堅牢な Active Directory にするにはどんな設定を見ればいいか、とりあえずWindowsサーバを構築するとどのような権限が付与されるかを理解することができる

これらを疑似企業環境を通して学ぶことができるのは非常に強力で、唯一無二の研修なのではないかと思います。

少々話は逸れるのですが、一方で私はPEN-200(OSCP)の研修をあまり人に勧めません。それには、以下のような理由があります。

  • 現在はHackTheBoxやTryHackMeといったより安価で体系的にまとまっているペネトレーションテスト学習用サービスが存在する。そちらを利用しても良い。
  • 今どき、2015年前後のPoCを刺すだけでshellを取れる環境はあまりない。
  • 試験環境があまり実践的とは思えない。(弊社ではマシンガチャとか呼ばれている)

しかし、PEN-300 はこれらの問題は全てカバーされており、環境には最新のパッチが当たっていますし、Labや試験は生きたネットワークを想定しているため非常に実践的です。「攻撃者がどのような視点で見ているのかを知る」という意味でも、自分はこのPEN-300の方がオススメできます。Twitterから「いきなりPEN-300できます?」という質問もいただきましたが、初期アクセスや権限昇格についてはカバーしていないというだけで、2021年以前のHackTheBox easyが何も見ずに30~40台root取れる能力があれば大丈夫だと思います。Labでも試験でも入口に対する深いenum.は要求されないので、方針がわからず詰むということはないはずです。

特にブルーチームに所属している方々は、ベンダーが公開しているレポートに対して深い理解ができるようになるためその点でも非常に効果があると感じています。自分はトレーニング中に「検知されたくない! イベントログもなるべく隠したい!!」とコードを改良していたら最終的に国家APTがよく使うようなRATのローダのようなものが出来上がり、「あーなるほどEvasionを突き詰めていくとこうなるんだなー」と感心しました。Evasion の技術を正しく知るということは、マルウェア解析やインテリジェンス生成の精度にも大きく影響します。普段ニュースやレポートを見てポエムを垂れ流すことしかできないという人も、PEN-300 を学ぶことで攻撃技術を正しく紐解いて具体的な防御へ活かしていくことができるでしょう。


OSEP の合格を目指すあなたへ

最後に、現在PEN-300を受講している人やOSEP取得を考えている人向けにちょっとしたアドバイスを上から目線でします。

家族がいる方はまず理解を得よう

意外とこの内容が書かれている記事がないのですが、家族と一緒に過ごしている環境で Offensive Security 系のトレーニングに挑戦する場合、受講する前に絶対に家族に話をして理解を得てから始めたほうがいいです。

弊社の資格支援制度は試験合格後にその費用全てを賄ってくれる形式となっています。しかし、30万円近いトレーニングを一旦自腹して「これ世間でも有名で評価されている研修なんだけど、転職にも有利になるんだわ。先行投資!先行投資!!」なんて説明した挙句、3ヶ月近く夜遅くまで仕事部屋に篭って体調悪そうな顔して家族と接していたら「この人、情報商材に騙されているんじゃないだろうか?」と心配されます。

ここまで行かなくても3ヶ月間のプライベートな時間はほぼ全てトレーニングに捧げることになりますし、72時間の試験と向き合う場合家族へのサポートはできなくなるため、数日の身の回りのことは家族やパートナーに全てお任せすることになります。誤解やすれ違いを生まないためにも事前にしっかりと話をして、トレーニングが終わった後にはたっぷり家族サービスをすることを約束しましょう。

ぶっちゃけ独占資格系のものでもないので、家庭環境を悪くしてまで取るような資格ではないと思います。

「まぁうまくいったからいっか」をなるべく解消する

HackTheBox や OSCP を受講した人は、Labに取り組んでいる最中以下の内容でかなり試行錯誤したのではないかと思います。

  • 脆弱性がある」と思った(推測した)箇所は本当に脆弱なのか?
  • Exploit code は正しく動いているか? (間違っていないか? 細かい修正が必要か? )

OSEP でもこれらにもちろん悩まされるのですが、これに加えて「Exploit は可能だがペイロードが検知されているのではないか?」というポイントにも気をつける必要があります。「Excesize のやり方でうまくいったからいっか」と思ってコピペだけしていると、Labや試験で痛い目に合うでしょう。これは「Excesize の資料が約2年前をベースにしているけれども最新のAnti-Virusソフトはすでに対応されて回避できなくなっている」ことを意味している場合があります。LabでExploitが成功しなかった場合、「何が原因で検知されてしまっているのか」を根気よく探す訓練はしておくことをオススメします。

あともう一点、Post Exploitation 目線でもお話しすると、いくらadministrator shellを取得したからといって取り返しのつかない作業をいきなりやることはやめたほうがいいです。例えば、サービスアカウントやadministrator のパスワード変更などです。OSEPの試験やLabは単体のマシンを攻略するのではなく、生きたネットワークを攻略することになります。なので、サービスアカウントが使用していたパスワードはネットワークで生活している特定のユーザのパスワードかもしれませんし、いくつかの管理端末上で使い回されているかもしれません。そのようなことを考慮せずに「WinRMから正規ユーザとしてログインしたいからパスワード変更!!」とかをいきなりやると横展開に必要な情報が消えて詰むことがあります。私はとある癖が抜けず、Labの最後が攻略できない理由が癖でやっていた自分のクソオペレーションのせいだと知ったときに絶望しました。特に試験中だと取り返しのつかない作業をしてしまった場合はネットワークのマシン全てをリセットする必要があるため、本当に手が震えると思います。自分のような失敗をしないためにも、御行儀がいいやり方での攻略をすることをオススメします。

困ったら仲間を見つけて聞こう

Offensive Security training のスタンスは『Try Harder』なので、わからないことがあっても基本的には教えてくれません。しかし、自分は『15分迷ったら聞いてね派』なのでこの考えは好きではありません。これは考え方の違いなので文句を言ってもどうしようもないのですが、同じ考え方をしている人は受講者の中に必ずいるはずです。考え方を変えて、そういう人を見つけて知見を共有しましょう。
Offensive Security の training には受講者のみが入れるフォーラムと誰でも入れるdiscordがあります。どちらかに書き込むか、"plz DM!" などと書いている人を見つけてDMを送り受講者通しで交流をしてみましょう。
discord.com

自分は「ラボのできているところまでのレポート見せ合いませんか?」とガバガバ英語で交流して、お互いにラボでやったことをコマンドレベルで共有することができました。そのおかげでもっと楽なやり方や便利なツールを知ることができたので、自分のような能力の高くない人ほど閉じこもりすぎず他人の力も借りた方がいいのではないかと思います。

......とは書きましたがこちら側からもGiveができないと1から10まで聞くことは難しいので、堅実に Excesize をこなし、Labを進めて詰まってきたら交流をしてみましょう。ここまでくれば自分でも「試してみたこと」「うまくいったこと」があるはずなので、いいGive and Takeができるはずです! Offsecのstaffは当事者ではありませんし、すでにパスした人の情報も半年すれば環境が違っているので、最も役に立つのは今トレーニングを受けている仲間の情報ではないかなと思います。

おわりに

合格ツイートに対して意外と反応があったので、合格体験記と称して知見をアウトプットしました。伝えたいことを一言で表すならば、「別にOSEP試験に合格しなくても、PEN-300を受講して学べるものは大きいので興味と体力と時間がある方にはオススメです」になります。

資格の話をすると「意味ある派」と「意味ない派」が現れて対立する姿が見られますが、私はどちらかというと「意味ない派」の人間です。OSEPそのものが価値を創造しているわけではないですし、PEN-300を通して学んだ知見をどう業務に活用するかの方がよほど大切だと思います。しかし「資格を取っても意味がないよね」=「意味がないから勉強をしなくてもいいよね」という考え方は間違っていると思っていて、特にPEN-300には 攻撃/防御/運用 全ての人にとって重要な知見が詰まっていると私は考えています。特にブルーチーム寄りの仕事をしている私の見方でも、「この程度の知識は理解しておかないと攻撃を絶対に防げないし気付かないよな」と思う部分は多々ありました。本ブログの内容を見て「1=1みたいなこと書くなよ」という感想を抱いた人は本当に「OSEPを取得する意味がない」人だと思いますが、「うーんこれどうやって検知するんだろう?」という疑問がわいた方は、勉強をするための一つのきっかけとして、OSEP / PEN-300 の受講を検討してみるのはいかがでしょうか。

最後になりますが、もし受講に悩んでいたりLabで詰まっていることがあれば(日本語限定で)わかっている範囲で答えますので、TwitterにでもDMしてください(ただし、捨て垢とかからは怖いのでやめてください。。。)。試験内容までは答えられませんが、いくつか参考になることをお話しできるかなとは思います。それでは👋

makepat を使用したFLIRT patternの生成を試す (+ Ghidra への適用)

はじめに

先月 IDA のメジャーバージョンが 8.0 にアップデートしました。
hex-rays.com

バージョンアップによって、IDA Pro には makepatというpluginが標準搭載されるようになりました。makepat は F.L.I.R.T. (Fast Library Identification and Recognition Technology) *1 というシグネチャマッチング機能に適用できるパターンファイルを自動生成してくれます。
F.L.I.R.T. は既存のライブラリ識別および自動的な命名を行ってくれるためIDA Proユーザにとってはなくてはならない存在ですが、最新のライブラリや本体が実質シェルコードと化しているマルウェアには IDA が提供している F.L.I.R.T. だけでは対応しきれません。そのため、そのような検体を扱う場合は「F.L.I.R.T.を自作して適用する」という手法が選択肢として上がってきます。本稿ではF.L.I.R.T.の作成と適用方法について簡単にまとめます。

なお、F.L.I.R.T. を自作して適用する手法については既に MANDIANT さんがブログに公開しているため目新しい内容ではありません。

www.mandiant.com

しかし、今回のバージョンからは3rd party製のツールに頼らずhex-raysさんの提供するutilitiesだけで完結するようになり、作成方法もかなり楽になりました。今までIDAPythonよくわからなくて敬遠していた方がいらっしゃればこの機会に触っていただければと思います。
(もっといい方法があるかもしれません。ご了承ください。)

makepat の使用とsignatureの適用(IDA Pro 8.0)

流れとしては、以下の3ステップとなります。ステップ、と呼ぶほど段階が分かれているかは怪しいですが......

1. makepat plugin で F.L.I.R.T. のパターンファイル(.pat)を作成
2. .pat ファイルからシグネチャファイル (.sig) の作成
3. .sig ファイルをIDA Proから読み込ませて適用

下準備

事前に用意するものは二つです。

  • sigmake
  • 解析済みのidbファイル(IDA Proで解析して保存したファイルです。)

実験用に解析済みの検体の亜種となるidbもあるとベストだと思います。

Release noteにも書いてありますが、makepat で作成した pattern から signature を作成するには公式から提供されている sigmakeというツールが必要となります。これはhex-raysのDownload centerから落としてきてください。Flair 8.0の中に入っています。
https://hex-rays.com/download-center/

Flair 8.0
.pat ファイルの作成

それでは、F.L.I.R.T. のパターンファイルを作成します。といっても、解析済みのidbファイルを IDA Pro から開いて上部メニューから Edit -> Plugins -> "Create PAT from the database" をポチポチするだけです。保存先を聞かれますので、好きな場所に好きな名前で保存しましょう。

makepat plugin

これで、あなたが解析したidbに存在するfunctionの一覧からパターンファイルが作成されました。このidbにstripされる前のLibraryが静的リンクされていた場合、それらの名称を元にしたパターンファイルを作成してくれるため、stripされた後のマルウェアに適用すればLibrary部分の関数だけ綺麗に命名がされることになります。

筆者は例として、124個の関数が存在するシェルコードタイプの検体に対して、37個分関数に命名をしてみました。結果として、makepat plugin によって37個のパターンが作られたことが実行結果から確認できました。

source idb
makepat results
.pat => .sig ファイルの作成

.pat => .sig の変換はsigmakeを実行するだけです。先ほど作成した.patファイルを第一引数、アウトプットの.sigファイルを第二引数として以下のように実行すればシグネチャに変換されます。

$ sigmake.exe my_custom_signature.pat my_custom_signature.sig  
.sig ファイルの適用

最後に、自作の.sigファイルを読み込ませます。IDA ProのインストールフォルダにはsigというF.L.I.R.T. シグネチャを配置しているフォルダ*2 があり、そこにはアーキテクチャごとにフォルダが切り分けられてシグネチャが格納されています。今回は pc というフォルダに作成した.sigファイルを配置し、同じフォルダに存在する autoload.cfg に設定を追加して読み込ませてみます。

筆者は my_custom_signature という名称で.sigファイルを配置し、autoload.cfg に設定を書き込みました。(下記画像参照)

.sig ファイルの配置とコンフィグ設定

これだけで、自作のシグネチャファイルを任意のidbに対して適応可能になりました。

亜種に自作シグネチャを適用してみる

最後に自作シグネチャを試しに使ってみます。今回は先ほどパターンを抽出した検体の亜種となるマルウェアのidbを用意して実験してみることにしました。シグネチャの適応はIDA ProでShift + F5を押し、signatureのviewで右クリックして"Apply new signatures"をクリックするとできます。以下のような画面が出てくるので、自分で作成した名称のシグネチャを選択してOKを押すだけです。

signature 適用画面


シグネチャ適応前 <=> 適応後の画像が以下となります。シェルコードのため左の反映前はほとんどシグネチャが認識されていない状態ですが、自作シグネチャを当てると 32 / 37 が適用されてきちんと名前が付きました。

シグネチャ適応比較


マルウェアに特化したシグネチャを作成することにあまり意味はありませんが、亜種の解析補助や攻撃者の分析(同一ライブラリの使用の特定)に使えるかもしれません。シグネチャを作る敷居は大幅に下がったので、とりあえず作っておいて充実させておくという選択肢もありなのではないかなと思います。

.sig ファイルを Ghidra にも適用する

筆者は先日まで 「.sig ファイル(F.L.I.R.T.)はIDA Proユーザの特権!」だと思っていたのですが、ここで作った.sigファイルはGhidraにも適用可能だということをプロから聞き目から鱗でした。(プロは以下のGhidra本を執筆、翻訳されているガチプロです。)
www.amazon.co.jp


www.amazon.co.jp


IDA ではなくGhidra派の方も一定数いらっしゃると思うので、Ghidraでも同様にシグネチャを適用してみます。適用にはApplySigというGhidra Scriptを使用します。

github.com

これをGhidraのScript Managerから実行させるだけです。

ApplySig

実行すると適用する.sigファイルを求められるので、先ほど作成した.sigファイルを選択すればOKです。

Apply .sig file


自作シグネチャを選択して実行すると、シグネチャが読み込まれて36 / 37のシグネチャが適用されたことがわかります。左下のFunctionsにもシグネチャ適応後の命名が載っているのでうまくいっていますね。

ApplySig result


.sig ファイルは少し古いものでよければFLIRTDBに蓄積されているので、Ghidra ユーザの方も使用してみると解析が楽になるのではないかと思います。Ghidra 至上主義の方もこの機会に試してみてください。
github.com

おわりに

makepat plugin を使った簡単な自作シグネチャの作成について書き残しました。また、筆者は普段IDA Proしか使っていないのですがGhidraでもF.L.I.R.T.の適用をやってみました。
筆者がマルウェア解析の勉強を始めた頃だと周りは「IDA Pro一強」という感じでIDAユーザしか見ませんでしたが、最近は前項でも紹介したGhidra本やGhidraを使用した研修*3が増えた影響か、Ghidraをメインで使用するユーザもちらほら見始めました。

先日とうとう「IDAはわかりませんけどGhidra使ったことあります!」という人にもお会いして、(「IDA Pro以外勝たん」という心境が変わらないのだが、もしかして自分、老害になろうとしている?) という気持ちになり、IDA Pro だけでなくGhidraにも触れながら書いてみました。
本内容が参考になる人なんて日本に数人レベルだとは思いますが、マルウェア解析している人の参考になれば幸いです。

*1:参考情報: https://github.com/Maktm/FLIRTDB

*2:一般的には "C:\Program Files\IDA Pro 8.0\sig" に配置されていると思います

*3:マルウェア解析の研修としては有名な FOR610 というSANSが提供するトレーニングがあるのですが、そちらの静的解析でもGhidraを使うようになったようですwww.sans.org