Mengekstrak Informasi Kredensial

Mengekstrak Informasi Kredensial

Latar Belakang

Informasi kredensial seperti username dan password dalam beberapa kasus kerap kali tercatat dalam log file. Bagi penguji keamanan Informasi atau penetration tester, Informasi seperti ini sangat bermanfaat bahkan tidak jarang dapat membantu mereka dalam memperluas penguasaan terhadap sistem atau aplikasi lainnya. Oleh sebab itu proses ekstraksi Informasi kredensial dari log file atau debug file tidak boleh dikesampingkan. Berikut beberapa kasus dimana membaca dan menganalisa log file, debug file atau file sejenis dapat bermanfaat:

  • Saat melakukan penyerangan Man-In-The-Middle dimana pertukaran Informasi antar pengguna dan server aplikasi direkam dalam sebuah file. Dalam tulisan ini saya menggunakan output file dari aplikasi Mana Toolkit sebagai contoh
  • Menjalankankan tcpdump saat berhasil masuk dan menguasai server. Hasil dump atau output kemudian dianalisa untuk mengekstrak Informasi kredensial
  • Mengunduh log file web server atau aplikasi saat hal tersebut dimungkinkan melalui proses eksploitasi kerentanan. Log file tersebut kemudian dianalisa untuk mengekstrak Informasi kredential apabila ada
  • Saat melakukan reverse engineering terhadap aplikasi mobile dan kemudian mencari Informasi kredensial diantara ribuan kode yang berhasil diungkap
  • Dan beberapa kasus lainnya

Membaca dan menganalisa log file yang umumnya menyimpan puluhan ribu baris Informasi akan menyulitkan dan memakan waktu yang cukup panjang. Dengan bantuan regular expression yang sederhana kita dapat menyortir Informasi tersebut dengan mudah.

Pada tulisan ini saya akan mengekstraksi Informasi kredensial yang tercatat pada log file bernama debug_ssl.log. File ini diperoleh dari teknik penyerangan Man-In-The-Middle menggunakan Mana Rogue Access Point yang mengimplementasikan SSLstript. Berikut ini adalah ilustrasi penyerangan.

credentials

Penjelasan rinci tentang teknik penyerangan Man-In-The-Middle menggunakan Mana Access Point dan SSLstrip akan dijelaskan pada tulisan yang terpisah karena fokus dari tulisan ini adalah mengekstraksi Informasi kredensial dari file debug_ssl.log.

Perlu diketahui bahwa Informasi kredesial yang ada pada contoh file debug_ssl.log merupakan akun pengujian milik saya sendiri dimana password telah diubah.

Script Regular Expression

Berikut adalah script regular expression yang sangat sederhana untuk mengekstrak Informasi kredensial dari file debug_ssl.log. Script ini juga dapat diunduh dari repositori https://github.com/adinanta/pentest-tools/tree/master/SSLStrip-Regex.


import re, os.path, argparse
from collections import defaultdict
from urllib.parse import unquote

def capture_creds(filename):
    # Simple regex to inspect strings between each POST or GET request

    my_header_regex = re.compile(r'(?:^GET|^POST)\shttps?://(?P<IP_ADDRESS>[\d.]*)',re.IGNORECASE|re.MULTILINE)

    # Simple regex to search and capture potential credentials

    my_remove_user_agent = re.compile(r'\'user-agent\'.*?:.*?(?:,)')

    my_creds_regex = re.compile(r'(?P<HOSTNAME>\'host.*?:.*?)(?:,)|(?P<USERNAME>user.*?=.*?|login.*?=.*?|nickname.*?=.*?|email.*?=.*?|wpname.*?=.*?|alias.*?=.*?|account.*?=.*?|sign.*?=.*?)(?:&|\s)|(?P<PASSWORD>password.*?=.*?)(?:&|\s)', re.I|re.M)

    #Save returned results in dictionary with IP address as the key

    my_key = 'default_key'
    my_dict = defaultdict(list)

    with open(filename,'r', encoding='ascii', errors='surrogateescape') as my_openfile:
        for line in my_openfile:
            check_header = my_header_regex.search(line)
            clear_user_agent = my_remove_user_agent.sub('',line)
            retrive_creds = my_creds_regex.findall(clear_user_agent)
            if check_header:
                my_key = check_header.group('IP_ADDRESS')
                #print(my_key)
            my_dict[my_key].append(retrive_creds)    
    return my_dict


my_file_name_parser = argparse.ArgumentParser(description='''
Simple script to extract credentials from a file called debug_ssl.log.
This file is used by Mana Toolkit SSLStrip-HSTS to record
any HTTP data traversing between client's web browser and web application server.

Running the script without option will open and read debug_ssl.log file from a default location
at "/usr/share/mana-toolkit/sslstrip-hsts/sslstrip2/debug_ssl.log"

''')

my_file_name_parser.add_argument("-l", "--location", help="Specify the location of the debug_ssl.log File", default='/usr/share/mana-toolkit/sslstrip-hsts/sslstrip2/debug_ssl.log')
args = my_file_name_parser.parse_args()

try:
    os.path.isfile(args.location)
    results = capture_creds(args.location)
    for each_key in results.keys():
        print('\nSite IP Address {}\n'.format(each_key))
        for my_dict_items in results[each_key]:
            if my_dict_items :
                for my_list in my_dict_items:
                    for item in my_list:
                        if item:
                            my_decode = unquote(item, encoding='UTF-8')
                            print(my_decode)        

except FileNotFoundError as err:
    print(err)

Cara kerja script diatas sangat sederhana yaitu mencari Informasi yang berhubungan dengan username dan password dalam tiap GET atau POST request dan kemudian mencatat IP serta HostName yang bersangkutan.

Cara Mejalankan Script

Script ini dapat dijalankan di sistem mana saja yang telah memiliki interpreter python3.

Jalankan script dengan opsi -h untuk melihat Informasi help seperti berikut ini

python3 debug_ssl_regex.py -h

Apabila script dijalankan pada sistem yang mengoperasikan program Mana Toolkit, maka opsi argumen tidak diperlukan karena script akan secara otomatis membaca file ssl_debug.log dari lokasi /usr/share/mana-toolkit/sslstrip-hsts/sslstrip2/.

python3 debug_ssl_regex.py

Apabila file debug_ssl.log tidak tersimpan di lokasi default atau ingin menjalankan script untuk mengekstrak kredensial dari file lain maka gunakan opsi -l atau --location diikuti dengan nama file log seperti berikut ini

python3 debug_ssl_regex.py -l 'lokasi-file-debug_ssl.log'

Untuk melihat Informasi kredential yang dapat diekstrak dari file contoh yang telah disediakan di repositori https://github.com/adinanta/pentest-tools/tree/master/SSLStrip-Regex, dapat menggunakan perintah berikut

python3 debug_ssl_regex.py -l sample_debug_ssl.log

Berikut adalah contoh output dari proses ekstraksi kredensial pada file sample_debug_ssl.log

credentials

credentials

Selanjutnya

Script regular expression ini sangat sederhana dan masih memerlukan penyesuaian atau fine tunning agar lebih akuran sehingga tidak menyertakan Informasi yang tidak berhubungan meskipun memiliki kosa kata mirip username atau password. Selain itu script regular expression ini lebih fokus menyortir kredensial pada file dengan format http log sehingga belum tentu efektif apabila dijalankan pada log file dengan format yang berbeda.

Oleh sebab itu pembaca diharapkan bisa memperbaiki dan menambahkan hal yang kurang pada script ini kemudian mengirimkan perbaikan tersebut melalui pull request ke repositori diatas :)

Semoga bermanfaat