プロトコルとライブラリモジュール
ここでは、コマンドをまたいで使われる技術を、基礎となる通信・データ形式から
Impacket の実装まで順に追います。たとえば Kerberos のページでは、チケット
交換を押さえたうえで impacket/krb5/ の関数と鍵の扱いを説明します。
コマンドページでは各 CLI の動作と分岐を、
Active Directory の解説では Windows 側の認証や運用を扱います。
コードの現在の実装を正とします。Microsoft の公開仕様 ([MS-SMB2]、[MS-NLMP]、[MS-KILE]、[MS-RPCE]、[MS-PAC] など) は背景知識として 参照しますが、Impacket が実装していない機能や、意図的に簡略化している点は この文書側に明記します。
- Structure とバイナリ DSL — ほぼすべての PDU の土台
- 対象プロトコルのページ
- そのプロトコルを使う コマンドページ
flowchart TB
CLI["examples/*.py"] --> Shared["impacket.examples.*"]
CLI --> High["高水準セッション"]
Shared --> High
High --> SMB["smbconnection / smb / smb3"]
High --> LDAP["ldap.ldap"]
High --> KRB["krb5.kerberosv5"]
High --> RPC["dcerpc.v5.transport"]
High --> TDS["tds.MSSQL"]
SMB --> NTLM["ntlm / spnego"]
LDAP --> NTLM
LDAP --> KRB
RPC --> NTLM
RPC --> KRB
TDS --> NTLM
TDS --> KRB
SMB --> Struct["structure.Structure"]
RPC --> NDR["dcerpc.v5.ndr"]
NDR --> Struct
NTLM --> Struct
| ページ | 対象モジュール | 主なコマンドカテゴリ |
|---|---|---|
| Structure | structure.py | 全般 |
| SMB / NetBIOS | nmb, smb, smb3, smb3structs, smbconnection, smbserver | SMB-RPC、RemoteExecution |
| NTLM / SPNEGO / NEGOEX | ntlm, spnego, negoex | SMB-RPC |
| Kerberos | krb5.* | Kerberos |
| DCE/RPC と NDR | dcerpc.v5.* | SMB-RPC、RemoteExecution、ActiveDirectory |
| LDAP と AD セキュリティ記述子 | ldap.*, ldaptypes, msada_guids | ActiveDirectory |
| DPAPI / SAM / LSA / NTDS | dpapi, dpapi_ng, winregistry, ese, examples.secretsdump | Secrets-Storage |
| TDS / MQTT / Exchange | tds, mqtt, dcerpc.v5.nspi | Database-Messaging |
| パケット / レジストリ / ESE / NTFS | ImpactPacket, ImpactDecoder, IP6*, ese, winregistry | Network-Packets、Secrets-Storage |
仕様と実装の差
Section titled “仕様と実装の差”Impacket は「仕様の完全実装」ではなく、研究・検証に必要な範囲の実装です。 特に次の点は、仕様書だけを読んでコードを直すと壊れます。
- SMB2 と SMB3 のクライアント実装はどちらも
smb3.pyにあります。 - NTLMv2 はネゴシエーション bit ではなく、ローカルの
USE_NTLMv2で決まります。 - S4U2self / S4U2proxy / U2U は
krb5.kerberosv5ではなく、主にexamples/getST.py側です。 impacket.aclは SMB/NTFS のファイル ACL であり、AD のnTSecurityDescriptorではありません。SimpleSMBServerは SMB 2.0.2、2.1、3.1.1 を受け付けます。SMB 3.0 / 3.0.2 は提示しません。

