Snoozy

1.Sleep-inducing; tedious.

Windows Kernel Mode Driverのreflectiveなロードをやってみる

Windows Kernel Mode Driverのreflectiveなロードをやってみる 最新のWindows OSに対して任意の非署名ドライバをロードするツールとしてkdmapperなどが知られている. kdmapperは脆弱なIntel製ドライバiqvw64e.sysをエクスプロイトし,任意のシステムルーチ…

IDAPythonによる解析の自動化をやってみる(動的解析編)

IDAPythonによる解析の自動化をやってみる(動的解析編) 前回の記事では,IDAPythonを使ってマルウェア解析工程の一部の自動化をやってみた.要約すると,IDAPythonを使って検体内に埋め込まれた暗号化されたAPI名を復号し,グローバルな変数をその値でリネー…

IDAPythonによる解析の自動化をやってみる(静的解析編)

IDAPythonによる解析の自動化をやってみる 逆アセンブラ,デコンパイラのデファクトスタンダードなツールの一つにIDA Proがある.IDA ProはPythonを使ったスクリプティング機能を提供しており,この機能を使うことでプラグインといった形でIDA自身の機能を拡…

amsi!AmsiScanBufferへのパッチによるAMSI Bypassをやってみる

amsi!AmsiScanBufferへのパッチによるAMSI Bypassをやってみる この記事はIPFactoryアドベントカレンダー2020の22日目の記事です. qiita.com AMSIとは docs.microsoft.com AMSI(Windows Antimalware Scan Interface)は,Windows上で動くアプリケーションやサ…

WOW64でのSystemcallをトレースしてみる

WOW64でのSystemcallをトレースしてみる この記事はIPFactory Advent Calendar 2020の4日目の記事です. qiita.com IPFactoryというサークルについてはこちらをご覧ください. ipfactory.github.io 前日12/3はn01e0による「userfaultfdについてのメモ」でし…

PoshC2を使ってみる

PoshC2を使ってみる PoshC2とは Python3ベースのオープンソースなC2フレームワークPoshC2を使ってみる. github.com PoshC2は次のような特徴を持つ. ビーコン,強制終了日,ユーザー情報など高度にカスタマイズされたペイロードの作成とターゲットへのロー…

Volatilityを使ってみる

Volatilityを使ってみる メモリフォレンジックフレームワークであるVolatilityを使ってみる. Volatilityは現在Python3で記述されたものや,Windows上でスタンドアロンで動作するexe形式のものが配布されているが,この記事執筆時点ではプロファイルやコマン…

Buffer I/Oによるドライバとアプリケーション間のデータ転送をやってみる

Buffer I/Oによるドライバとアプリケーション間のデータ転送をやってみる アプリケーションからI/O要求を行い,デバイスドライバにデータを転送する場合,一時的にデータを保存するためのバッファが必要になる. Windowsではデータバッファにアクセスするた…

IAT Hookをやってみる

IAT Hookをやってみる PEファイルフォーマットにおけるIAT(Import Address Table)は,インポートしたAPIのエントリーポイントへのアドレスが記載されるルックアップテーブルだ. あるモジュールからエクスポートされるAPIを使用する際,実行時にIATを参照し…

仮想アドレスから物理アドレスを求めてみる

仮想アドレスから物理アドレスを求めてみる 本稿では,Windows10 x64システム上で動作する,4-level pagingについてみていく. 最初に4-level pagingによるアドレス変換の概要に触れた後,後半では実際にWinDbgを使ってシステム上の仮想アドレスから物理アド…

ReflectivePELoaderを実装してみる

ReflectivePELoaderを実装してみる ディスク上のEXEやDLLは,Windowsが提供するPEローダによって,セクションの展開やベース再配置,IATの解決など,実行可能な状態に調整されながらメモリ上にロードされる. これはディスク上のPEファイルをそのままメモリ…

メモリパッチによるAPIフックコードの実装をやってみる

メモリパッチによるAPIフックコードの実装をやってみる 今回は後学のために,FridaやMicrosoft Detoursなどの便利なライブラリやフレームワークに頼らないAPIフックコードの実装をやってみる. フック処理を行うプログラムをDLLとして作成し,これをターゲッ…

Windowsにカーネルドライバを読み込ませてみる

Windowsにカーネルドライバを読み込ませてみる カーネルドライバを作成し,Windowsシステムにロードさせてみる. まず以下を参考にドライバ開発環境を用意する. 初めてのドライバーの作成 - Windows drivers | Microsoft Docs 環境 VirtualBox上にWindowsホ…

Transactional NTFS利用によるProcess Doppelgangingをやってみる

Transactional NTFS利用による Process Doppelgangingをやってみる マルウェアなどがAVスキャナーからの検知を逃れるために使う手法の1分野にProcess Injctionがある. 本記事では以下のリポジトリを参考に,Process Injction手法の1つであるTransactional…

WinDbg PreviewでVirtualBox上のWindowsホストをカーネルモードデバッグする

WinDbgでVirtualBox上のWindowsホストをカーネルモードデバッグする 環境 ホストのバージョンは以下。 PS C:\Users\ry0kvn> systeminfo OS 名: Microsoft Windows 10 Home OS バージョン: 10.0.18363 N/A ビルド 18363 WinDbg Previewのバージョンは以下。 D…

メモリパッチによるmsv1_0!SpAcceptCredentialsのフックをやってみる

メモリパッチによるmsv1_0!SpAcceptCredentialsのフックをやってみる Windowsは対話型のユーザー名/パスワードベースのログオン用に2つの認証パッケージ、すなわちMSV1_0とKerberosを使用する。 後者はよく知られているように、ドメインのログオン用に利用さ…

メモリからDLLを読み込んでみる

メモリからDLLを読み込んでみる DLL(dynamic link library)は通常、Windows APIのLoadlibraryやLoadlibraryEXを使ってディスク上から読み込んで使用する。 このLoadLibraryやLoadLibraryExは、ファイルシステム上のファイルでのみ機能し直接メモリからDLLを…

VirtualQueryExによるRWX保護メモリの列挙をやってみる

VirtualQueryExによるRWX保護メモリの列挙をやってみる マルウェアが使う基本的なcode injection手法の一部には、最初にVritualAllocを使ってターゲットプロセス内に実行可能なメモリ領域を割り当て、その領域にコードを書き込むことで攻撃者が望む処理を実…

PEファイルフォーマットのAddressOfEntryPoint利用によるCode Injectionをやってみる

PEファイルフォーマットのAddressOfEntryPoint利用によるCode Injectionをやってみる PEファイルフォーマットのAddressOfEntryPoint利用によるCode Injectionをやってみる。 PEファイルフォーマットのAddressOfEntryPointは実行可能ファイルの実行開始位置の…

QueueUserAPCによるEarly Bird Injectionをやってみる

QueueUserAPCによるEarly Bird Injectionをやってみる QueueUserAPCによるEarly Bird Injectionをやってみる。 APCを使ったcode injection手法はEarly Bird Injectionと呼ばれることがある。これはターゲットプロセスのプロセス作成ルーチンの早い段階、すな…

NtCreateSectionとNtMapViewOfSectionによるProcess Injectionをやってみる

NtCreateSectionとNtMapViewOfSectionによるProcess Injectionをやってみる Process Injectionとは マルウェアなどが使用する、正当なプロセスに悪意あるコードを注入する手法は一般にProcess Injectionと呼ばれる。 プロセスにコードを注入する方法は数多あ…

64bitアプリケーションのPEBからImageBaseを取得してみる

64bitアプリケーションのPEBからImageBaseを取得してみる Windowsにおいて各プロセスはエグゼクティブプロセス(Executive Process:EPROCESS)構造体によって表現される。 この構造体にはプロセスに関する多くの情報が保持されており、たとえば、複数のスレッ…

LoadLibrary,CreateRemoteThreadを使ったDLL Injectionをやってみる

LoadLibrary,CreateRemoteThreadを使ったDLL Injectionをやってみる DLLインジェクションの紹介記事なんて何番煎じだよという声が聞こえてきそうですが、DLLを使った攻撃は多くの派生版があり、それらを理解するにはまず最も基本的なLoadLibrary,CreateRemot…

NtUnmapViewOfSecitonによるProcess Hollowingをやってみる

NtUnmapViewOfSecitonによるProcess Hollowingをやってみる 本記事は IPFactory Advent Calendar 2019 - Qiita 19日目の記事です。 qiita.com Ntdll.dllからエクスポートされるNtUnmapViewOfSectionによるProcess Hollowingをやってみる。 Process Hollowing…

VulnHubのIMF: 1をやってみたよ~!

VulnHubのIMF: 1をやってみたよ~!ということでやっていく。 まずはnetdiscoverでIMF VMのアドレスを取得。 アドレスが分かったら次はNmapでポートスキャン。 80番ポートでApacheが動いていることがわかる。 アクセスしてみた結果が次の画像。 かっこいいペ…

VulnHubのMr-Robot: 1をやってみたよ~!

VulnHubのMr-Robot: 1をやってみたよ~!ということでやっていく。 https://www.vulnhub.com/entry/mr-robot-1,151/ まずはアドレスを取得する。 ついでポートスキャン。 ふむ、80番ポートと443番ポートが開放されていることがわかる。 80番ポートでは単純な…

VulnHubのKioptrix: 2014 (#5)をやってみたよ~!

VulnHubのKioptrix: 2014 (#5)をやってみたよ~!ということでやっていく。 https://www.vulnhub.com/entry/kioptrix-2014-5,62/ まずは対象VMのアドレスの取得から。 アドレスをゲットできたらNmapでポースキャン。 80番ポートと8080番ポートでhttpが稼働中…

VulnHubでBrainpan: 1をやってみたよ~!

VulnHubでBrainpan: 1をやってみたよ~!ということでやっていく。 https://www.vulnhub.com/entry/brainpan-1,51/ まずはいつもどおりアドレスをゲットするところから始める。 次はポートスキャン。 9999番ポートでabyssなるもの、10000番ポートでhttpサー…

VulnHubでSickOs: 1.2をやってみたよ~!

VulnHubのSickOs: 1.2をやってみたよ~!ということでやっていく。 https://www.vulnhub.com/entry/sickos-12,144/ まずは対象ホストのアドレスを取得する。 /etc/hostsに[address] [name]の形でIPと名前の対応を登録しておくと、勝手に名前解決してくれるか…

VulnHubのVulnOS: 2をやってみたよ~!

VulnHubのVulnOS: 2をやってみたよ~!ということでやっていく。 https://www.vulnhub.com/entry/vulnos-2,147/ まずは対象ホストのアドレスを確認する。 次いで、稼働中のサービスを確認する。 80番ポートでサービスhttpdが稼働しているのでアクセスしてみ…