Burp Suite na Steroidoch
Burp Suite je už teraz všestranný a výkonný nástroj pre profesionálov v oblasti webovej bezpečnosti. Ponúka širokú škálu funkcií na testovanie bezpečnosti webových aplikácií, ako je skenovanie, prehľadávanie a zachytávanie HTTP požiadaviek. Avšak pre tých, ktorí hľadajú ešte väčšiu flexibilitu a automatizáciu, je plugin PyScripterer ideálnym pomocníkom pre špecifické úlohy s ktorými sa môžete stretnúť pri penetračných testoch.
Výhody použitia PyScripterer:
- Rýchly vývoj(Python): Po nainštalovaní pluginu pyscripter je možné jednoducho vytvárať a testovať vlastné scripty. PyScripter ponúka kompiláciu scriptu, jeho aktiváciu/deaktiváciu, logovanie výstupu a errorovych hlášok.
- Rozšírenie funkčnosti: Zatiaľ čo Burp Suite je bohatý na funkcie, PyScripterer vám umožňuje rozšíriť jeho funkčnosť. Môžete vytvárať vlastné rozšírenia a doplnky prispôsobené vašim špecifickým potrebám, ako následne ukážeme na príklade s HMAC autentifikaciou.
Všeobecné využitia:
- Automatizované skenovanie zraniteľností
S pluginom PyScripterer môžete vytvárať vlastné skripty na automatizáciu skenovania zraniteľností v Burp Suite.
- Prispôsobené útoky
Nástroj Intruder od Burp Suite je ideálny pre väčšinu útokov, avšak niekedy je nedostačujúci.
Avšak spolu s pluginom PyScripterer môžete generovať vlastné HTTP payloads, napríklad z parametrov cieľovej aplikácie, čím na konci dňa môžete nájsť zraniteľné miesta.
- Manipulácia s dynamickými parametrami
Vo webových aplikáciách sa parametre môžu často dynamicky meniť. S pluginom PyScripterera vlastným skriptom, môžete napríklad napísať skript, ktorý extrahuje dynamické tokeny z požiadaviek a automaticky ich vloží do nasledujúcich požiadaviek.
- Integrácia s inými nástrojmi
Plugin PyScriptererďalej môžete použiť na integráciu s ostatnými bezpečnostnými nástrojmi a službami. Napríklad môžeme exportovať nájdené zraniteľnosti do ostatných systémov.
Využití tohto nástroja sú naozaj široké.
Príklad z môjho penetračného testovania REST API :)
Stručné vysvetlenie HMAC autentifikácie
HMAC, čo je skratka pre Hash-based Message Authentication Code, je kryptografická metóda používaná na overenie integrity a pravosti správy v oblasti počítačovej bezpečnosti. Autentifikácia HMAC vo svojom jadre poskytuje spôsob, ako zabezpečiť, že správa nebola počas prenosu zmenená alebo nebola manipulovaná a že skutočne pochádza z dôveryhodného zdroja.
Najprv niečo k tomu, prečo som použil plugin PyScripterer
REST API, ktoré som testoval používa HMAC na mieru upravenú autentifikáciu. Práve pre tento prípad som si musel vytvoriť skript, ktorého úlohou bolo extrahovať pri každej HTTP požiadavke parametre, ktoré sa následne použili pri generovaní výslednej HMAC hlavičky, ktorá sa posielala iba v danej požiadavke.
Parametre, ktoré sú použité pri tvorbe HMAC hlavičky(overovací kód správy):
Autentifikačný kód správy obsahuje údaje požiadavky, ktoré chce klient odoslať na server.
Parametre použité na vytvorenie overovacieho kódu správy:
- Tajný kľúč API používaný na hashovanie tela požiadavky na vytvorenie, pôvodne poskytnutý serverom a doručený klientovi pomocou nejakého zabezpečeného kanála.
- ID API pôvodne poskytnutý serverom a doručený klientovi pomocou nejakého zabezpečeného kanála.
- Salt - náhodne generovaný reťazec znakov(nesmie sa opakovať), vhodné použiť UUID
- Timestamp/Expiration je celkový počet sekúnd od januára 01. 1970 UTC (musí zodpovedať času servera Xsec)
- Metóda požiadavky - je metóda používaná v požiadavke http (v podstate GET, POST)
- URL žiadosti - je úplná adresa URL požiadavky vrátane parametrov
- Telo požiadavky - Obsahuje v podstate telo požiadavky, v našom prípade JSON objekt, ktorý sa hashuje buď MD5 alebo SHA256, záleží od dohody so serverom. Tu sa taktiež najprv vykonáva normalizácia.
Príklad vytvorenia MAC podpisu:
Príklad GET metódy:
API Secret Key: u/lpbsvt+J7chL8gkGI7N7oV3s/x3S5SPkRSx/7HJSk=
Api Id: 087deeb8-38e1-4866-b2ea-73d9990661c8
Method: GET
Request URL: http://localhost:666/CustomerPortalApi/GetPresonalGreeting?customerId=105595
po URLEncode:
HTTP%3A%2F%2FLOCALHOST%3A666%2FCUSTOMERPORTALAPI%2FGETPRESONALGREETING%3FCUSTOMERID%3D105595
Timestamp: 10. July. 2020 10:07:32 = 1594375652 seconds
Salt: 1ee3b49852ed4dbdb6c802739ead3c60
BodyHashBase64: Prázdne telo požiadavky. Inak urobíme MD5/SHA256 hash tela požiadavky po normalizácii.
Aplikujeme HMACSHA256 hash funkciu s tajným kľúčom API:
Získame macSignatureCode v Base64 formáte:
X/bvkTc0K79qN4hiQ7bkyEAFPlqXxixtTYsZeG4Ir1s=
Vytvorenie HMAC Autorizačnej hlavičky
Tu vytvoríme reťazec oddelený “:” z vybraných parametrov.
Výsledná autorizačna hlavička pre danú HTTP GET požiadavku
PyScripter-er
Plugin nainštalujete podľa inštrukcií na https://github.com/lanmaster53/pyscripter-er/tree/master#usage
Avšak ak potrebuje nainštalovať potrebné python knižnice do Jython modulu, nainštalujete ich nasledovne.
- Otvorte terminál na adrese kde sa nachádza váš Jython standalone JAR súbor.
- java -jar jython-standalone-2.7.3.jar -m pip install <package_name>
Výsledný skript pre HMAC autentifikáciu, je dostupný aj na https://gist.github.com/blazejrypak/910380dc107254afd43d5d7751a69e82
# Description: This script adds HMAC authentication headers to an HTTP request.
# Title: HMAC Authentication for HTTP Requests
import sys
import time
import uuid
import hashlib
import hmac
import base64
import re
import json
import unicodedata
from datetime import datetime
import urllib
# Check if the message is a request
if messageIsRequest:
print('########################################################################')
# Replace 'apiID' and 'apiKey' with your actual API credentials
apiID = 'your_api_id_here'
apiKey = 'your_api_key_here'
# Analyze the HTTP request
request = helpers.analyzeRequest(messageInfo)
headers = request.getHeaders()
# URL encoding and conversion to uppercase
url = urllib.quote(url_base, safe='').upper()
method = request.getMethod()
# Get the current timestamp and generate a random salt
request_timestamp = str(int(time.time()))
salt = str(uuid.uuid4())
# Extract the message body from the request
msg = messageInfo.getRequest()[request.getBodyOffset():].tostring()
# Normalize the message by replacing newline characters
normalized_msg = msg.replace('\r\n', '\n')
# Calculate the MD5 hash of the normalized message and encode it in base64
request_content_hash_base64 = base64.b64encode(
hashlib.md5(normalized_msg.encode()).digest()).decode()
# If the HTTP method is GET, set the content hash to an empty string
if method == 'GET':
request_content_hash_base64 = ''
# Construct the authentication message
message = "{0}:{1}:{2}:{3}:{4}:{5}".format(
apiID, method, url, request_timestamp, salt, request_content_hash_base64)
print(message)
# Decode the API key from base64
secret_key_bytes = base64.b64decode(apiKey)
# Calculate the HMAC signature using the secret key and message
digest = hmac.new(secret_key_bytes, msg=message.encode(),
digestmod=hashlib.sha256).digest()
# Encode the HMAC signature in base64
signature = base64.b64encode(digest).decode()
# Construct the new authentication header value
newHeaderValue = "{0}:{1}:{2}:{3}".format(
apiID, signature, salt, request_timestamp)
print(newHeaderValue)
# Add the HMAC authentication header to the request
headers.add('Authorization: hmacauth {0}'.format(newHeaderValue))
# Build the new HTTP request with the authentication header
new_request = helpers.buildHttpMessage(headers, msg)
messageInfo.setRequest(new_request)
Vytvorenie skriptu pre HMAC autentifikáciu je relatívne jednoduché, keďže plugin nám poskytuje základne Burp API pre prácu s požiadavkami a odpoveďami 🙂
Ďalšie príklady nájdete na: https://github.com/lanmaster53/pyscripter-er/tree/master/snippets
Záver:
V tomto článku sme sa pokúsili poskytnúť kompletný prehľad o tom, ako využiť PyScripterer pre rozšírenie funkčnosti Burp Suite a implementovať autentifikáciu HMAC na zabezpečenie REST API služby.
Pamätajte, že bezpečnosť nie je statickým cieľom, ale neustálym procesom. Verím, že tento plugin a možno aj moja implementácia HMAC autentifikácie sa vám niekedy hodí pri špecifických úlohách penetračného testovania :).
Zdroje:
https://www.linkedin.com/pulse/hmac-hashed-message-authentication-code-nikhil-goyal/