الوصول عن بُعد (جهة المستخدم)¶
ما هو¶
يحتفظ ملف NTUSER.DAT الخاص بالمستخدم بآثار الاتصالات البعيدة التي أجراها المستخدم من الحاسوب. وهذه
هي جهة المصدر في الحركة الجانبية:
- سطح المكتب البعيد (
mstsc): - الحواسيب التي كُتبت في العميل، والأحدث أولًا؛
- مفتاح واحد لكل حاسوب سجّل المستخدم الدخول إليه، مع اسم الحساب المستخدم وبصمة (thumbprint) شهادة الخادم التي قبلها المستخدم؛
- الحواسيب التي سمح لها المستخدم باستخدام الأجهزة المحلية.
- PuTTY:
- الجلسات المحفوظة: المضيف، والمنفذ، والحساب، والبروتوكول، وملف المفتاح، والوكيل، وإعادة توجيه المنافذ؛
- الجلسات التي بدأت أخيرًا؛
- كل مفتاح خادم SSH قبله المستخدم.
- WinSCP: الجلسات المحفوظة ومفاتيح خوادم SSH المقبولة، بالصيغة نفسها المستخدمة في PuTTY.
- محركات الأقراص المعيّنة: كل محرك أقراص عُيّن ليُستعاد عند تسجيل الدخول، والمسارات التي كُتبت في Map Network Drive.
- المشاركات: المشاركات التي ركّبها Explorer (
MountPoints2).
وهي تُظهر إلى أين انتقل الحساب بعد ذلك وبأي بيانات اعتماد، حتى بعد زوال السجلات الخاصة بالحاسوب البعيد نفسه.
أفضل استنتاج: اتصل ملف تعريف هذا المستخدم بهذا الهدف، أو حفظ
اتصالًا به. ولا تثبت الجلسة المحفوظة أو الاسم المكتوب وحدهما أن الاتصال نجح. أما مفتاح المضيف المقبول
أو مفتاح Servers الذي يحتوي على UsernameHint فأقوى دلالة: فقد وصل العميل إلى الخادم.
الموقع¶
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Terminal Server Client\Default MRU0 … MRU9
Software\Microsoft\Terminal Server Client\Servers\<host> UsernameHint, CertHash
Software\Microsoft\Terminal Server Client\LocalDevices <host> = devices
Software\SimonTatham\PuTTY\Sessions\<session>
Software\SimonTatham\PuTTY\Jumplist Recent sessions
Software\SimonTatham\PuTTY\SshHostKeys <type>@<port>:<host> = key
Software\Martin Prikryl\WinSCP 2\Sessions\<session>
Software\Martin Prikryl\WinSCP 2\SshHostKeys
Network\<letter> RemotePath, UserName, ProviderName
Software\Microsoft\Windows\CurrentVersion\Explorer\Map Network Drive MRU
Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##server#share
اجمع NTUSER.DAT مع سجلات المعاملات الخاصة به لكل ملف تعريف. واجمع خلية SOFTWARE الخاصة بالنظام
أيضًا: فهي توفر معرّف SID لكل مستخدم.
تحذيرات للمحلل¶
- أوقات المفاتيح هي أوقات القوائم. تحتوي
DefaultوSshHostKeysوMap Network Drive MRUعلى قوائم، وآخر كتابة لمفتاحها هي وقت آخر تغيير للقائمة. ويعود ذلك الوقت إلى العنصر الأول (MruPosition0). أما بالنسبة للعناصر الأخرى فهو مجرد حد أعلى. ولكل من مفتاحServers\<host>أو الجلسة أوNetwork\<letter>أو المشاركة وقته الخاص. - المحفوظ ليس مستخدمًا بالضرورة. يمكن حفظ جلسة PuTTY أو WinSCP دون الاتصال أبدًا. يعيد PuTTY كتابة
Recent sessionsعند بدء جلسة محفوظة، ويضيف مفتاح مضيف عند الوصول إلى خادم لأول مرة. - كلمات المرور:
- يمكن لـ WinSCP تخزين كلمات مرور الجلسات والأنفاق والوكلاء.
- لا يخزن PuTTY سوى كلمة مرور الوكيل، بنص صريح.
- يبيّن
PasswordStoredوStoredPasswordsفيDetailsالقيم المضبوطة. ولا يُفك ترميزها أو تُكتب في الإخراج أبدًا. - يُسقط WinSCP القيم الافتراضية. الجلسة التي لا تحتوي على
FSProtocolهي SFTP، والجلسة التي لا تحتوي علىPortNumberتستخدم المنفذ الافتراضي للبروتوكول. ويبقىProtocolوPortحينئذٍ فارغين بدلًا من التخمين. - بصمات مفاتيح المضيف هي بصمات
SHA256:…الخاصة بـ OpenSSH، كما يعرضهاssh-keygen -lوsshوPuTTY 0.75 والإصدارات الأحدث. يحسبها Juntei من المفتاح الذي يحتفظ به PuTTY وWinSCP. قارنها بمفتاح الخادم نفسه وملفاتknown_hostsوالسجلات لتحديد الخادم الكامن وراء اسم أو عنوان IP. ولا يملك مفتاح SSH-1 (rsa) بصمة. - محركات الأقراص المعيّنة: لا يُضبط
RemoteUsernameإلا عندما يكون محرك الأقراص قد عُيّن بحساب آخر؛ ويكتب Windows قيمةREG_DWORDبمقدار 0 عندما يستخدم حساب المستخدم نفسه. - المشاركات: يحتوي
MountPoints2أيضًا على مفاتيح لوحدات التخزين وأحرف محركات الأقراص. ولا يُبلَغ هنا إلا عن مشاركات الشبكة (##server#share)؛ و\\server@SSL@443\DavWWWRootمشاركة WebDAV. - الإزالة: لا يترك مسح القوائم، أو استخدام عميل محمول، أي أثر هنا. قارن مع Jump Lists وPrefetch
وملفات
.rdpوذاكرة التخزين المؤقت للصور النقطية في RDP (RDP bitmap cache) وسجلات الهدف.
التحليل باستخدام Juntei¶
Usage: juntei parse-registry remote-access <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find NTUSER.DAT hives
-f, --file <FILE> Parse one NTUSER.DAT
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry remote-access -d evidence/ -o remote.csv
juntei parse-registry remote-access -f NTUSER.DAT -t jsonl \
| jq 'select(.Client == "rdp" or .HostKeyFingerprint != null)'
يحصي الملخص الاتصالات حسب العميل. ويسرد الاتصالات التي كُتبت مفاتيحها أخيرًا، الأحدث أولًا، والجلسات التي تحتفظ بكلمة مرور.
حقول الإخراج¶
| الحقل | التفسير |
|---|---|
Host، User، UserSID، SourcePath |
المضيف، واسم مجلد ملف التعريف، ومعرّف SID الخاص بالمستخدم من ProfileList في النظام (مع خلية SOFTWARE الخاصة بالنظام)، والخلية. |
Client |
rdp أو putty أو winscp أو mapped_drive أو network_share. |
Kind |
مصدر السجل: rdp_mru، rdp_server، rdp_local_devices، putty_session، putty_host_key، winscp_session، winscp_host_key، network_drive، map_network_drive_mru، mount_point. |
Target، Port |
الحاسوب (اسم المضيف أو عنوان IP) والمنفذ، أو المشاركة (\\server\share). ولا يُعطى المنفذ إلا حيث كتبه Windows أو العميل. |
RemoteUsername |
الحساب المستخدم على الهدف: UsernameHint، أو UserName الخاص بالجلسة (أو جزء user@ من HostName في PuTTY)، أو UserName الخاص بمحرك أقراص معيّن. |
Protocol |
Protocol في PuTTY (ssh، telnet، raw، …)، أو FSProtocol في WinSCP (sftp، scp، ftp، webdav، s3)، أو موفر محرك الأقراص المعيّن (Microsoft Windows Network). |
MRU-Position |
الموضع في قائمته (0 هو الأحدث): MRU<n>، MRUList، Recent sessions في PuTTY. |
SessionName |
اسم الجلسة المحفوظة، مع فك ترميز %20 وغيرها من رموز الهروب. |
HostKeyType، HostKeyFingerprint، HostKey |
نوع مفتاح مضيف SSH المقبول (rsa2، ssh-ed25519، ecdsa-sha2-nistp256، …)، وبصمته بصيغة OpenSSH، وأرقامه كما خُزّنت. |
DriveLetter |
حرف محرك الأقراص المعيّن. |
PasswordStored |
ما إذا كانت الجلسة تحتفظ بكلمة مرور؛ ولا يُفك ترميزها أبدًا. |
Details |
إعدادات أخرى، بصيغة Name=Value; … (CSV) أو بوصفها كائنًا (JSON): CertHash لشهادة RDP، وLocalDevices، وملف مفتاح الجلسة، والوكيل، ونفق SSH، وإعادة توجيه المنافذ، والأمر البعيد والمجلدات، وStoredPasswords، وLabel للمشاركة، وConnectionType لمحرك الأقراص. |
KeyPath، ValueName |
المفتاح، والقيمة للسجل الذي يمثّل قيمة واحدة. |
KeyLastWrittenUTC |
آخر كتابة للمفتاح (انظر التحذيرات المتعلقة بالقوائم). |
DataRaw |
بايتات القيمة (بالنظام الست عشري)، عندما لا تكون سلسلة نصية أو يتعذر فك ترميزها. |
TransactionLogStatus، LogsApplied |
سياق استرداد سجل Windows. |
Problems |
قيم من النوع الخاطئ (مع بايتاتها)، ومفاتيح مضيف تتعذر قراءتها، وأحرف في MRUList غير موجودة، وقيم لا يسردها. |
استراتيجية التحقيق¶
- اسرد أهداف كل مستخدم حسب العميل، وقارنها بالأنظمة التي يُفترض أن يصل إليها ذلك المستخدم. وابحث عن
المشاركات الإدارية (
C$،ADMIN$) وعناوين IP. - دوّن الحسابات المستخدمة (
RemoteUsername): مسؤولو المجال والحسابات المحلية على أجهزة أخرى. - طابق
HostKeyFingerprintمع مفاتيح الخوادم، وCertHashمع شهادات خوادم RDP. - اربط النتائج مع أحداث تسجيل الدخول على الأهداف (4624 من النوع 10 و3، و1149)، وJump Lists وملفات
LNK (
mstsc.exe،putty.exe، والملفات المفتوحة من المشاركات)، وPrefetch، وذاكرة التخزين المؤقت للصور النقطية في RDP. - استخدم
parse-registry read --recover-deletedللإدخالات المحذوفة، والنسخ الأقدم منNTUSER.DATالخاص بملف التعريف (Volume Shadow Copies، والنسخ الاحتياطية) للقوائم الممسوحة.