普段 CTF の問題を解くために使用しているマシンの構成がだいぶ把握しきれなくなってきてしまったので、心機一転新しい環境を構築することしました。
今回は、今後同じような環境を作るときの手間を減らせるように、できるだけコマンドベースでセットアップをしていきたいと思います。
なお、僕がメインで解く問題が Rev や Forensic のため、インストールしているツールなども若干偏りがあるかと思いますがご容赦ください。
もくじ
- WinGet で解析ツールをインストールする
-
- WinDbg
- Sysinternals
- .NET 6.0 Desktop Runtime
- Ghidra
- Visual Studio 2019
- Noriben
- Java 17
- Java 8
- Eclipse Memory Analyzer
- Android Studio
- Android SDK Platform Tools
- Android NDK
- pestudio
- RegistryChangesView
- Hayabusa
- Timeline Explorer
- Hasher
- jq
- Frida
- Eclipse IDE
- Gradle
- PEiD
- jadx
- jd-gui
- ProcessHacker
- LLDB
- npcap
- Windows Terminal
- hollows_hunter
- APIMiner
- CyberChef
- UPX
- FTK Imager
- PDFStreamDumper
- うさみみハリケーン、青空白猫
- Volatility 2.6
- Universal Radio Hacker (URH)
- Cheat Engine
- Sysmon
- VcXsrv Windows X Server
- Pybag
- AssetStudio
- ExtremeDumper
- Quick Assembler
- cutter
- Fiddler
- Chocolatey でツールをインストールする
- 環境変数をセットアップする
- まとめ
事前準備
OS のクリーンインストールとアップデート
僕は普段 Windows マシンで CTF の問題を解いているので、作成する VM も Windows で作成していきます。
また、仮想化基盤には Hyper-V を使用し、以下の構成でマシンを作成しました。
ストレージ容量は 232 GB に設定しています。
なお、OS のクリーンインストールとアップデート方法については割愛します。
Nested Virtualization の有効化
仮想マシンを作成したら、マシンを停止した状態で管理者権限で起動した Power Shell から以下のコマンドレットを実行し、ネストされた仮想化を有効化します。
これで仮想マシン上で Android Emulator などを起動できるようになります。
# Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
Set-VMProcessor -VMName "Win10CTF" -ExposeVirtualizationExtensions $true
参考:Run Hyper-V in a Virtual Machine with Nested Virtualization | Microsoft Learn
ネットワークアダプタの設定変更
管理者権限で起動した Power Shell からネットワークアダプタの設定変更を行います。
今回は、外部接続する Default Switch には既定値の DHCP 接続、内部ネットワークの Internal には固定アドレス 192.168.50.10/28 を割り当てます。
# Get-NetIPAddress で Internal の NIC に対応する InterfaceIndex を特定する
Get-NetIPAddress
>
IPAddress : 169.254.116.214
InterfaceIndex : 8
InterfaceAlias : Ethernet 3
AddressFamily : IPv4
# InterfaceIndex が 8 のネットワークに 192.168.50.10/28 を割り当て
New-Netipaddress -InterfaceIndex 8 -IpAddress 192.168.50.10 -PrefixLength 28
参考:New-NetIPAddress (NetTCPIP) | Microsoft Learn
回復パーティションの削除
今回は仮想マシンなので回復パーティションは削除しておくことにします。
管理者権限で起動したコマンドプロンプトから Diskpart.exe を起動して以下のコマンドを順に実行します。
Diskpart.exe
# ディスクを列挙して選択します。
DISKPART> list disk
Disk 0 Online
DISKPART> select disk 0
# パーティションを列挙して Recovery パーティションの ID を特定します。
DISKPART> list partition
Partition ### Type Size Offset
------------- ---------------- ------- -------
Partition 3 Recovery 535 MB 79 GB
# 特定した Recovery パーティションを選択して削除します。
DISKPART> select partition 3
DISKPART> delete partition override
Windows のセットアップ
作成した仮想マシンを起動したら管理者権限で Power Shell を起動し、各種設定を行います。
以下のコマンドを実行して一括で設定を実行できます。
# ユーザフォルダパスに使用する名前の設定
$username = "kash1064"
# タイムゾーンを UTC に設定
tzutil.exe /s "UTC"
# Power Shell スクリプトの実行権限を変更
Set-ExecutionPolicy RemoteSigned
# エクスプローラで拡張子と隠しファイルを表示する
Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -name "HideFileExt" -Value 0
Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -name "Hidden" -Value 1
# RDP 接続の有効化
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
# 機能名の一覧を取得:Get-WindowsOptionalFeature -Online
# WSL と仮想マシンプラットフォーム、Hyper-V の有効化
Enable-WindowsOptionalFeature -NoRestart -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -NoRestart -Online -FeatureName HypervisorPlatform
Enable-WindowsOptionalFeature -NoRestart -Online -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature -NoRestart -Online -FeatureName Microsoft-Hyper-V-All
# デフォルトでインストールされてるいらない Store Package を削除する
# パッケージの一覧は Get-AppxPackage | Select-Object Name で取得できる
# Tiktok、Instagram は手動削除が必要
Get-AppxPackage -alluser *MicrosoftSolitaireCollection* | Remove-Appxpackage
Get-AppxPackage -alluser *MicrosoftStickyNotes* | Remove-Appxpackage
Get-AppxPackage -alluser *Microsoft.People* | Remove-Appxpackage
Get-AppxPackage -alluser *Office.OneNote* | Remove-Appxpackage
Get-AppxPackage -alluser *Microsoft.GetHelp* | Remove-Appxpackage
Get-AppxPackage -alluser *MicrosoftOfficeHub* | Remove-Appxpackage
Get-AppxPackage -alluser *MicrosoftSolitaireCollection* | Remove-Appxpackage
Get-AppxPackage -alluser *MicrosoftStickyNotes* | Remove-Appxpackage
Get-AppxPackage -alluser *Microsoft.People* | Remove-Appxpackage
Get-AppxPackage -alluser *SkypeApp* | Remove-Appxpackage
Get-AppxPackage -alluser *YourPhone* | Remove-Appxpackage
Get-AppxPackage -alluser *SpotifyAB.SpotifyMusic* | Remove-Appxpackage
Get-AppxPackage -alluser *Disney* | Remove-Appxpackage
Get-AppxPackage -alluser *ZuneMusic* | Remove-Appxpackage
Get-AppxPackage -alluser *3DViewer* | Remove-Appxpackage
Get-AppxPackage -alluser *Microsoft.MSPaint* | Remove-Appxpackage
Get-AppxPackage -alluser *Microsoft.WindowsMaps* | Remove-Appxpackage
Get-AppxPackage -alluser *messaging* | Remove-Appxpackage
Get-AppxPackage -alluser *windowscommunicationsapps* | Remove-Appxpackage
Get-AppxPackage -alluser *ZuneVideo* | Remove-Appxpackage
Get-AppxPackage -alluser *BingWeather* | Remove-Appxpackage
Get-AppxPackage -alluser *MicrosoftOfficeHub* | Remove-Appxpackage
Get-AppxPackage -alluser *Microsoft.549981C3F5F10* | Remove-AppxPackage
Get-AppxPackage -alluser *Microsoft.Todo* | Remove-AppxPackage
# 不要なショートカットの削除
# C:\ProgramData\Microsoft\Windows\Start Menu\Programs
# %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
Get-ChildItem -Path "C:\ProgramData\Microsoft\Windows\Start Menu\Programs"
Remove-Item -Path "C:\ProgramData\Microsoft\Windows\Start Menu\Programs" -Include *.lnk
# Desktop のショートカットをすべてスタートメニューにも登録する
Copy-Item -Path "C:\Users\$username\Desktop\*.lnk" -Destination "C:\ProgramData\Microsoft\Windows\Start Menu\Programs"
# Tools フォルダの作成
New-Item -ItemType "directory" -Path "C:\Tools"
# Defender の除外追加
$ExclusionPath = @"
C:\Tools\,
C:\Users\$usename\Downloads\,
C:\Users\$usename\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_*\
"@
$ExclusionPath = $ExclusionPath.Replace("`n", "")
Add-MpPreference -ExclusionPath $ExclusionPath
# UAC の設定を 2 段階目(通知のみ)に変更
# Get-ItemProperty HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system
Set-ItemProperty "HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system" -name "ConsentPromptBehaviorAdmin" -Value 5
Set-ItemProperty "HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system" -name "PromptOnSecureDesktop" -Value 0
Set-ItemProperty "HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system" -name "EnableLUA" -Value 1
# OS の再起動
Start-Sleep -Seconds 30
Restart-Computer
※ 設定の反映には OS の再起動が必要です。
エクスプローラで拡張子と隠しファイルを表示する
エクスプローラのオプション設定はHKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced
以下のレジストリキーで管理できます。
今回は以下のコマンドレットでエクスプローラで拡張子と隠しファイルを表示する設定を行ってます。
# エクスプローラで拡張子と隠しファイルを表示する
Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -name "HideFileExt" -Value 0
Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -name "Hidden" -Value 1
Windows の機能を有効化する
WSL2 や Android Studio のエミュレータなどを使用するため、以下の機能を有効化しています。
-NoRestart
を指定しないとコマンド実行時に再起動されてしまうので注意が必要です。
# WSL と仮想マシンプラットフォーム、Hyper-V の有効化
Enable-WindowsOptionalFeature -NoRestart -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -NoRestart -Online -FeatureName HypervisorPlatform
Enable-WindowsOptionalFeature -NoRestart -Online -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature -NoRestart -Online -FeatureName Microsoft-Hyper-V-All
参考:Enable-WindowsOptionalFeature (DISM) | Microsoft Learn
IME の設定変更をする
こちらは一旦 GUI から設定しました。
システム音の無効化
こちらも一旦 GUI から設定しました。
コントロールパネルから [Change system sounds] を開き、[No Sounds] を設定します。
WinGet で解析ツールをインストールする
ツールの管理は可能な限り winget を使っていきます。
そのため、winget で取得できないツールや、winget で取得しない方が運用が楽なツールは全部以下でインストールしてしまいます。
# 各種パッケージのインストール
winget.exe install --id Google.Chrome
winget.exe install --id Mozilla.Firefox
winget.exe install --id Canonical.Ubuntu
winget.exe install --id Typora.Typora
winget.exe install --id Microsoft.VisualStudioCode
winget.exe install --id Microsoft.WindowsTerminal
winget.exe install --id Git.Git
winget.exe install --id WiresharkFoundation.Wireshark
winget.exe install --id SoftwareFreedomConservancy.QEMU
winget.exe install --id 7zip.7zip
winget.exe install --id Microsoft.XMLNotepad
winget.exe install --id Brave.Brave
winget.exe install --id PortSwigger.BurpSuite.Community
winget.exe install --id Google.AndroidStudio
winget.exe install --id Hex-Rays.IDA.Free
winget.exe install --id icsharpcode.ILSpy
winget.exe install --id dnSpyEx.dnSpy
winget.exe install --id Notepad++.Notepad++
winget.exe install --id Python.Python.3.10
winget.exe install --id Python.Python.2
winget.exe install --id WinMerge.WinMerge
winget.exe install --id Microsoft.WinDbg
winget.exe install --id OliverBetz.ExifTool
winget.exe install --id ExpressVPN.ExpressVPN
winget.exe install --id GIMP.GIMP
winget.exe install --id Microsoft.Office
winget.exe install --id Canonical.Ubuntu.2204
winget.exe install --id Canonical.Ubuntu.2004
winget.exe install --id kalilinux.kalilinux
winget.exe install --id Chocolatey.ChocolateyGUI
winget.exe install --id MHNexus.HxD
winget.exe install --id ImageMagick.ImageMagick
参考:Windows Package Manager(winget)でよく使うアプリケーションをインストールする - かえるのひみつきち
各種解析ツールを手動でインストールする
WinGet でインストールできない(もしくはしたくない)ツールをインストールしていきます。
WinDbg
以下からダウンロードした Windows SDK のインストーラでインストールする。
参考:Debugging Tools for Windows - Windows drivers | Microsoft Learn
また、以下からダウンロードした reg ファイルでワークスペースをセットアップする。
参考:Releases · kash1064/WinDbg-Classic-Dark
Sysinternals
以下からダウンロードしたファイルをC:\Tools\SysinternalsSuite
に配置する。
参考:Sysinternals Utilities - Sysinternals | Microsoft Learn
また、Procmon と Proexp にはシンボルの設定を行う。
SDK に含まれる C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\dbghelp.dll
に変更後、シンボルパスに以下を設定する。
srv*C:\symbols*https://msdl.microsoft.com/download/symbols
Proexp にも同じ設定を行う。
.NET 6.0 Desktop Runtime
以下からダウンロードした MSI でインストール。
参考:Download .NET 6.0 Desktop Runtime (v6.0.16) - Windows x64 Installer
Ghidra
以下からファイルをダウンロードしてC:\Tools\Ghidra
に展開する。
参考:Releases · NationalSecurityAgency/ghidra
以下の手順でセットアップを行う。
参考:CTFのためのGhidra環境構築メモ - かえるのひみつきち
Visual Studio 2019
MSDN からインストーラをダウンロードしてインストールします。
インストールが完了したら、最低限キーボードマッピングを VSCode に統一しておきます。
Noriben
以下からファイルをダウンロードしてC:\Tools\Noriben
に展開する。
参考:GitHub - Rurik/Noriben: Noriben - Portable, Simple, Malware Analysis Sandbox
Java 17
以下からファイルをダウンロードしてC:\Tools\jdk-17
に展開する。
Java 8
以下からダウンロードし、C:\Tools\jdk-8
に展開する。
Eclipse Memory Analyzer
以下からファイルをダウンロードしてC:\Tools\MemoryAnalyzer
に展開する。
参考:c Open Source Project | The Eclipse Foundation
以下の手順で Java のパスを指定する。
Android Studio
WinGet でインストール済みの Android Studio を起動してセットアップを進める。
また、デバイスマネージャから x86 と x86_64 のエミュレータを作成しておく。
Android SDK Platform Tools
以下からファイルをダウンロードしてC:\Tools\android-sdk
に展開する。
参考:SDK Platform Tools release notes | Android Studio | Android Developers
Android NDK
SDK Manger から NDK のインストールを行う。
参考:Install and configure the NDK and CMake | Android Studio | Android Developers
または、ダウンロードした NDK ファイルを直接ビルドする。
参考:ライブラリ関数を dlopen して ELF バイナリとして動的解析を行う
pestudio
以下からダウンロードしてC:\Tools\pestudio
に展開する。
参考:Winitor
RegistryChangesView
以下から RegistryChangesView をダウンロードしてC:\Tools\RegistryChangesView
に展開する。
参考:RegistryChangesView - Compare snapshots of Windows Registry
Hayabusa
以下からダウンロードしてC:\Tools\Hayabusa
に展開する。
参考:Releases · Yamato-Security/hayabusa · GitHub
Timeline Explorer
以下からダウンロードしてC:\Tools\TimelineExplorer
に展開する。
Hasher
以下からダウンロードしてC:\Tools\Hasher
に展開する。
jq
以下からダウンロードしてC:\Tools\jq
に配置する。
参考:Download jq
Frida
以下の手順でセットアップし、C:\Tools\Frida
に配置する。
Eclipse IDE
以下からダウンロードしたインストーラでインストールする。
参考:Eclipse Downloads | The Eclipse Foundation
インストール先はC:\Tools\Eclipse
に設定する。
また、ワークスペースは%USERPROFILE%\Documents\eclipse-workspace
に作成する。
Gradle
以下からダウンロードし、C:\Tools\Gradle
に展開する。
PEiD
以下からダウンロードし、C:\Tools\PEiD
に展開する。
参考:PEiD (Windows) - Download & Review
jadx
以下からダウンロードし、C:\Tools\jadx
に展開する。
参考:Releases · skylot/jadx · GitHub
jd-gui
以下からダウンロードし、C:\Tools\jd-gui
に展開する。
ProcessHacker
以下からダウンロードし、C:\Tools\ProcessHacker
に展開する。
LLDB
以下からダウンロードしたインストーラでC:\Tools\LLVM
にインストールする。
参考:Releases · llvm/llvm-project · GitHub
npcap
以下からダウンロードしたインストーラでインストールする。
参考:Npcap: Windows Packet Capture Library & Driver
Windows Terminal
WinGet でインストールしたアプリケーションのセットアップを行う。
ショートカットキーやスタートアップフォルダを指定しておく。
また、[elevate] を True にした Power Shell のプロファイルを追加し、settings.json
を以下のように並び変えておく。
{省略}
{
"commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"hidden": false,
"name": "Windows PowerShell",
"startingDirectory": "%USERPROFILE%\\Downloads"
},
{
"commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"elevate": true,
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44ba}",
"hidden": false,
"name": "Elevate Windows PowerShell",
"startingDirectory": "%USERPROFILE%\\Downloads"
},
{
"guid": "{51855cb2-8cce-5362-8f54-464b92b32386}",
"hidden": false,
"name": "Ubuntu",
"source": "CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc"
},
{
"guid": "{07b52e3e-de2c-5db4-bd2d-ba144ed6c273}",
"hidden": false,
"name": "Ubuntu-20.04",
"source": "Windows.Terminal.Wsl",
"tabTitle": "Remnux"
},
{
"commandline": "%SystemRoot%\\System32\\cmd.exe",
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"hidden": false,
"name": "Command Prompt",
"startingDirectory": "%USERPROFILE%\\Downloads"
},
{省略}
これで、Windows Terminal から簡単に昇格した Power Shell プロンプトを起動できる。
hollows_hunter
以下からダウンロードしたファイルをC:\Tools\hollows_hunter
に展開する。
参考:Releases · hasherezade/hollows_hunter
APIMiner
以下からダウンロードしたファイルをC:\Tools\APIMiner
に展開する。
参考:Release APIMiner-v1.0.0 · poona/APIMiner
CyberChef
以下からダウンロードしたファイルをC:\Tools\CyberChef
に展開してブラウザブックマークしておく。
参考:Releases · gchq/CyberChef · GitHub
UPX
以下からダウンロードしたファイルをC:\Tools\upx
に展開する。
参考:Releases · upx/upx · GitHub
FTK Imager
以下からダウンロードしたインストーラでC:\Tools\AccessData
にインストール。
参考:Exterro Thank You Page - Exterro
PDFStreamDumper
以下からダウンロードしたインストーラでC:\Tools\PDFStreamDumper
にインストール。
参考:Releases · dzzie/pdfstreamdumper
うさみみハリケーン、青空白猫
以下からダウンロードしたファイルをC:\Tools\UsaMimi
に展開。
参考:汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」
Volatility 2.6
以下からダウンロードしたファイルをC:\Tools\volatility2
に展開する。
Volatility 3 は、基本的に WSL 上にインストールしたものを使用する。
参考:Release Downloads | Volatility Foundation
Universal Radio Hacker (URH)
以下からダウンロードしたインストーラでC:\Tools\Universal Radio Hacker
にインストールする。
Cheat Engine
以下からダウンロードできる、どうやらインストーラが Adware のようなものを抱き合わせでインストールするらしく、Defender で PUA として検出される。
特別使用頻度も多くないので普段はインストールせず、どうしても使いたい時だけ導入する。
参考:Cheat Engine
Sysmon
以下からダウンロードし、sysmon64 -i
でインストールする。
参考:Sysmon - Sysinternals | Microsoft Learn
VcXsrv Windows X Server
以下からダウンロードし、C:\Tools\VcXsrv
にインストールする。
参考:VcXsrv Windows X Server download | SourceForge.net
Pybag
以下のコマンドでインストールする。
cd C:\Tools
# 公式のリポジトリにはインストール時のバグが存在している(2023/5/24時点)ので、Forkしたリポジトリを clone する
git clone https://github.com/kash1064/Pybag
cd .\Pybag\
python.exe ./setup.py install
参考:kash1064/Pybag: Python module for Windbg’s dbgeng plus additional wrappers.
AssetStudio
以下からダウンロードします。
ExtremeDumper
以下のリポジトリからダウンロードします。
参考:Releases · wwh1004/ExtremeDumper · GitHub
Quick Assembler
以下のリポジトリからバイナリをダウンロードします。
参考:zodiacon/AllTools: All reasonably stable tools
cutter
以下からダウンロードしたファイルを展開します。
参考:Cutter
Fiddler
以下からダウンロードしたインストーラを使用します。
参考:Web Debugging Proxy and Troubleshooting Tools|Fiddler
Chocolatey でツールをインストールする
CFF Explorer などを含む一部のツールは、Chocolatey 経由でインストールすることにします。
ますは、管理者権限で起動した Power Shell で以下のコマンドを実行して Chocolatey をインストールします。
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Chocolatey のインストールが完了したら、以下のコマンドで各ツールのインストールを行います。
# ツールのインストール
choco install apimonitor -y
choco install hashmyfiles -y
choco install fakenet -y
choco install explorersuite -y
環境変数をセットアップする
以下のコマンドを管理者権限で起動した Power Shell で実行することで環境変数をまとめて設定できます。
実際のパスは環境に合わせて変更します。
# ユーザ環境変数のセットアップ
$usename = "kash1064"
$UserPath = @"
C:\Tools\SysinternalsSuite;
C:\Tools\android-sdk;
C:\Tools\android-ndk;
C:\Tools\Noriben;
C:\Tools\Ghidra;
C:\Tools\MemoryAnalyzer;
C:\Tools\Hayabusa;
C:\Tools\Hasher;
C:\Tools\TimelineExplorer;
C:\Tools\jq;
C:\Tools\Frida;
C:\Tools\Gradle\bin;
C:\Tools\jdk-17\bin;
C:\Tools\LLVM\bin;
C:\Tools\APIMiner;
C:\Tools\hollows_hunter;
C:\Tools\upx;
C:\Tools\UsaMimi;
C:\Tools\volatility2;
C:\Tools\Universal Radio Hacker;
C:\Program Files\qemu;
C:\ProgramData\chocolatey\lib\apimonitor;
C:\ProgramData\chocolatey\lib\hashmyfiles;
C:\Program Files\NTCore\Explorer Suite;
C:\Users\$usename\AppData\Local\Programs\Python\Python310\Scripts\;
C:\Users\$usename\AppData\Local\Programs\Python\Python310\;
C:\Users\$usename\AppData\Local\Microsoft\WindowsApps;
C:\Users\$usename\AppData\Local\Programs\Microsoft VS Code\bin;
C:\Users\$usename\AppData\Local\Microsoft\WinGet\Links;
C:\Users\$usename\AppData\Local\Programs\ExifTool;
C:\Python27\Scripts;
C:\Python27;
"@
$UserPath = $UserPath.Replace("`n", "")
[System.Environment]::SetEnvironmentVariable("Path", $UserPath, "User")
[System.Environment]::SetEnvironmentVariable("NDK_PROJECT_PATH", "C:\Tools\NDK", "User")
[System.Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Tools\jdk-17", "User")
# システム環境変数のセットアップ
$usename = "kash1064"
$SytemPath = @"
C:\Users\$usename\AppData\Local\Programs\Python\Python310\Scripts\;
C:\Users\$usename\AppData\Local\Programs\Python\Python310\;
C:\Python27\Scripts;
C:\Python27;
C:\Windows\system32;
C:\Windows;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Windows\System32\OpenSSH\;
C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;
C:\Program Files\dotnet\;
C:\ProgramData\chocolatey\bin;
C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;
C:\Program Files\Git\cmd;
C:\Tools\SysinternalsSuite;
C:\Tools\APIMiner;
C:\Tools\hollows_hunter;
C:\Tools\UsaMimi;
C:\Tools\volatility2;
C:\Program Files\qemu;
"@
$SytemPath = $SytemPath.Replace("`n", "")
[System.Environment]::SetEnvironmentVariable("Path", $SytemPath, "Machine")
# OS の再起動
Restart-Computer
WSL のセットアップ
WSL2 に変更する
まず、以下からダウンロードした wslupdatex64.msi をインストールします。
参考:Manual installation steps for older versions of WSL | Microsoft Learn
続いて、管理者権限で起動した Power Shell から以下のコマンドを実行して WSL2 を有効化します。
wsl --set-version Ubuntu 2
wsl --set-version Ubuntu-20.04 2
WSL2 の有効化コマンドを 2 回実行しているのは、WinGet を使ったインストール時に以下の 2 つのパッケージをインストールしているためです。
winget.exe install --id Canonical.Ubuntu.2204
winget.exe install --id Canonical.Ubuntu.2004
Ubuntu 20.04
の方は、後述する SHIFT と REMnux の前提要件を満たすために必要なバージョンです。
また、Ubuntu 20.04
だと依存関係の glib のバージョンの関係で最近の問題バイナリを実行できなくなるため、メインで使用する CTF 用の環境としてはUbuntu 22.04
の方を使用します。
パッケージをインストールする
以下のコマンドでパッケージなどをインストールします。
こちらの環境はメインの解析に使用する方なので、Ubuntu 22.04
を使用します。
# 更新
sudo apt update && sudo apt upgrade -y
# Docker のインストール
# https://docs.docker.com/engine/install/ubuntu/
sudo apt install \
ca-certificates \
curl \
gnupg \
lsb-release \
-y
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# パッケージのインストール
sudo apt update && sudo apt install \
apktool \
bash-completion \
build-essential \
binwalk \
cifs-utils \
containerd.io \
docker-ce \
docker-ce-cli \
docker-compose \
docker-compose-plugin \
elfutils \
exiftool \
foremost \
gdb \
gdbserver \
glibc-source \
golang-go \
git \
hexedit \
hprof-conv \
libc6-dbg \
lldb \
libbpf-dev \
libseccomp-dev \
libfuzzy-dev \
maven \
make \
mingw-w64-* \
nasm \
netcat \
net-tools \
openjdk-17-jdk \
patchelf \
pdftohtml \
pngcheck \
python2.7 \
python3-pip \
python3.10 \
python3.10-dev \
qemu \
rar \
ruby-rubygems \
snapd \
steghide \
ssh \
tmux \
tshark \
ufw \
unzip \
upx-ucl \
vim \
yara \
7zip \
-y
# 2024/06 時点で docker-compose を動かすのに必要
pip3 install requests==2.29.0
# /usr/sbin/iptables-legacy を指定する
sudo update-alternatives --config iptables
# rust のインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# SageMath のインストール(サイズが大きいので不要なら入れない)
sudo apt install sagemath -y
# Docker を通常ユーザで使用する
sudo gpasswd -a $USER docker
sudo service docker start --enable
# SSH キーを作成して Github に登録
ssh-keygen
# Tool のインストール
mkdir ~/Tools
# gdb peda と pwndbg のインストール
git clone https://github.com/longld/peda.git ~/Tools/peda
git clone https://github.com/scwuaptx/Pwngdb.git ~/Tools/Pwngdb
cat << EOF > ~/.gdbinit
source ~/Tools/peda/peda.py
source ~/Tools/Pwngdb/pwngdb.py
source ~/Tools/Pwngdb/angelheap/gdbinit.py
define hook-run
python
import angelheap
angelheap.init_angelheap()
end
end
EOF
# zsteg
sudo gem install zsteg
# stegsolve
mkdir -p ~/Tools/stegsolve
cd ~/Tools/stegsolve
wget http://www.caesum.com/handbook/Stegsolve.jar -O stegsolve.jar
chmod +x stegsolve.jar
# pwninit
mkdir -p ~/Tools/pwninit
cd ~/Tools/pwninit
wget https://github.com/io12/pwninit/releases/download/3.3.0/pwninit
chmod +x ./pwninit
# pip2 のインストール
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o ~/Tools/get-pip.py
python2.7 ~/Tools/get-pip.py
/home/ubuntu/.local/bin/pip2 install --upgrade setuptools
/home/ubuntu/.local/bin/pip2 install pipenv
sudo apt install python2-dev --fix-missing
# piptool
sudo pip3 install \
angr \
ciphey \
pipenv \
python-magic \
pycryptodome \
pwntools \
yara-python
# volatility3
cd ~/Tools
git clone https://github.com/volatilityfoundation/volatility3.git
# extract-vmlinux のダウンロード
cd ~/Tools
wget https://raw.githubusercontent.com/torvalds/linux/master/scripts/extract-vmlinux
chmod +x extract-vmlinux
# ropr のインストール
cargo install ropr
# Steganography のインストール
cd ~/Tools
git clone https://github.com/ragibson/Steganography
cd Steganography
sudo python3 setup.py install
# stegoveritas のセットアップ
pip3 install stegoveritas
stegoveritas_install_deps
# daring のインストール(依存関係もセットでインストールする)
sudo apt install cmake clang bison flex libfuse-dev libudev-dev pkg-config libc6-dev-i386 \
gcc-multilib libcairo2-dev libgl1-mesa-dev libglu1-mesa-dev libtiff5-dev \
libfreetype6-dev git git-lfs libelf-dev libxml2-dev libegl1-mesa-dev libfontconfig1-dev \
libbsd-dev libxrandr-dev libxcursor-dev libgif-dev libavutil-dev libpulse-dev \
libavformat-dev libavcodec-dev libswresample-dev libdbus-1-dev libxkbfile-dev \
libssl-dev python2 -y
wget https://github.com/darlinghq/darling/releases/download/v0.1.20220704/darling_0.1.20220704.focal_amd64.deb
sudo dpkg -i darling_0.1.20220704.focal_amd64.deb
rm darling_0.1.20220704.focal_amd64.deb
# qemu 系のツールをインストール
sudo apt install qemu-user-binfmt qemu-efi qemu-efi-aarch64 qemu-efi-arm qemu-system qemu-system-arm qemu-system-common qemu-system-x86 qemu-system-misc qemu-utils g++-arm-linux-gnueabihf gdb-multiarch -y
# wabt のインストール
wget https://github.com/WebAssembly/wabt/releases/download/1.0.33/wabt-1.0.33-ubuntu.tar.gz
# smali2java と jadx のインストール https://github.com/skylot/jadx/releases
# one_gadget のインストール
sudo gem install one_gadget
# seccomp-tools のインストール
sudo apt install ruby-dev -y
sudo gem install seccomp-tools
# Risc-V
git clone https://github.com/riscv-collab/riscv-gnu-toolchain
cd riscv-gnu-toolchain
git checkout origin/extra-multi-lib-test
sudo apt-get install autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev python-is-python3 -y
# root に gef のインストール
sudo su
wget -O ~/.gdbinit-gef.py -q https://gef.blah.cat/py
sudo su
./configure --prefix=/home/ubuntu/Tools/riscv
make linux
# glibc のソースのクローン
cd ~/Tools
git clone https://github.com/bminor/glibc
echo source ~/.gdbinit-gef.py > ~/.gdbinit
# Alias のセットアップ
echo -e "
alias tarbz2='tar -jxvf'
alias targz='tar -zxvf'
alias tarxz='tar -Jxvf'
alias aptupgrade='sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y'
alias checksec='pwn checksec'
alias run_python2='docker run --net host --rm -it -v $PWD:/app python2 bash'
alias run_python3='docker run --net host --rm -it -v `pwd`:/app python3 bash'
alias run_wine='docker run --rm -it --user ubuntu -v $PWD:/usr/app wine32 bash'
alias run_php='docker run --net host --rm -it -v $PWD:/root php bash'
alias run_impacker='docker run --net host --rm -it -v `pwd`:/root impacket'
alias pince='cd /home/parrot/Tools/PINCE && sh PINCE.sh'
alias aptupgrade='sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y'
alias sample2zip='zip -P infected -r'
sudo /etc/init.d/docker start > /dev/null
export PATH=$PATH:/home/ubuntu/.local/bin:/home/ubuntu/Tools:/home/ubuntu/Tools/stegsolve:/home/ubuntu/Tools/wabt:/home/ubuntu/Tools/pwninit
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0" >> ~/.bashrc
# ホストマシンへのシンボリックリンクを作成
ln -s /mnt/c/Users/kash1064/Downloads/ win
# よく使うコマンドのパスワード入力を不要にする
echo $USER ALL=NOPASSWD: /usr/bin/apt | sudo tee /etc/sudoers.d/apt
echo $USER ALL=NOPASSWD: /etc/init.d/docker | sudo tee /etc/sudoers.d/docker
sudo chmod 440 /etc/sudoers.d/*
# 32bit のバイナリを実行するためのライブラリを追加
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libncurses6:i386
# ripgrep のインストール
# pcre2 を有効化する場合は cargo install ripgrep --features 'pcre2'
rustup install stable
cargo install ripgrep
# クリーンアップ
sudo apt autoremove -y
sudo rm /var/crash/*
WSL2 に libc-database をインストールする
libc のオフセットを調べることができる libc-database ですが、オンラインのツールだと情報が更新されていない場合などがあり、必要なバージョンを特定することができません。
そのため、ローカルで libc-database を使用できるようにします。
# libc-database の Clone
cd ~/Tools
git clone https://github.com/niklasb/libc-database
# 依存関係のインストール
sudo apt update && sudo apt install -y \
binutils file \
wget \
rpm2cpio cpio \
zstd jq -y
# 各プラットフォームの libc 情報を取得(時間とストレージを消費します)
cd ~/Tools/libc-database
./get ubuntu debian rpm centos alpine
参考:GitHub - niklasb/libc-database: Build a database of libc offsets to simplify exploitation
WSL2 に rp++ をインストールする
以下からダウンロード。
WSL2 に REMnux のツールをインストールする
続いて、Ubuntu 20.04
の方の WSL2 に REMnux のアドオンをインストールします。
sudo apt update && sudo apt upgrade -y
# インストーラの配置
wget https://REMnux.org/remnux-cli
mv remnux-cli remnux
chmod +x remnux
sudo mv remnux /usr/local/bin
# インストール
sudo remnux install --mode=addon
参考:Install from Scratch - REMnux Documentation
参考:Windowsの環境でもLinuxのフォレンジックツールを使いたい! - Qiita
WSL2 で GUI ツールを使えるようにする
REMnux のアドオンには多くの GUI ツールが含まれてるため、これを使えるようにしたいと思います。
まず、すでにインストール済みの VcXsrv Windows X Server を起動します。
ここは既定値のままにし、次の設定も [Start no client] を選択します。
Extra Settings は以下のように設定します。
パラメータには -ac
と入力しています。
これで作成したconfig.xlaunch
を%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
に保存します。
次に、REMnux をセットアップした WSL の .bashrc に以下のコマンドを追加し、ディスプレイ設定を登録します。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
OS の再起動後、WSL で起動した GUI アプリが Windows 側で使用できるようになれば設定は完了です。
Kali のセットアップ
WSL でインストールした Kali Linux もセットアップしていきます。
Kali は事前に WSL2 に変更しておきます。
wsl --set-version kali-linux 2
Ubuntu に kali-tools で入れてもいいですが、msfvenom などのツールを楽に使うために最低限のセットアップだけしておきます。
まずは、EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository
のエラーの解消のために以下のリポジトリからダウンロードした kali-archive-keyring2022.1all.deb を WSL の Kali に配置してインストールします。
# https://http.kali.org/kali/pool/main/k/kali-archive-keyring/
sudo dpkg -i kali-archive-keyring_2022.1_all.deb
参考:Index of /kali/pool/main/k/kali-archive-keyring
参考:The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository
これで apt によるパッケージ更新ができるようになります。
続いて、以下のコマンドでパッケージの更新とセットアップを進めます。(いきなり dist-upgrade をかけると apt が壊れるので注意)
# Install Tools
sudo apt update && sudo apt install kali-linux-large -y
sudo apt install \
bash-completion \
vim \
sox \
multimon-ng \
-y
参考:Win-KeX | Kali Linux Documentation
また、Kali のツールには GUI アプリが多く含まれます。
これらを使えるようにするために、Kali 側の .bashrc にも以下を追記しておきます。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
なお、WSL 側で問題が起きてアクセスできなくなった場合は、Power Shell から以下のコマンドを実行することで root ユーザとしてシェルにアクセスできます。
wsl --distribution kali-linux -u root
まとめ
3 年ほど使ってきた CTF 用の環境をリビルドしてみました。
しばらく使っていると構成がわけわからなくなってきてしまうので、今後更新する際はこの記事をアップデートしようかと思います。