Demonstration der massiven passiven Reverse-DNS-Abfrage mit PowerShell für IT-Sicherheit | Reverse IP/DNS API | WhoisXML API

Demonstration des massiven passiven Reverse-DNS-Lookups mit PowerShell für IT-Sicherheitsuntersuchungen: der Fall des Phorphiex-Botnets

IP-Adressen sind einfache Eingabedaten für IT-Sicherheitsuntersuchungen: Sie sind technisch notwendig, damit die Knotenpunkte des Internets miteinander kommunizieren können. Wenn sie also nach der Begehung eines Cyberverbrechens nicht auf trickreiche Weise gelöscht werden oder vor der Begehung in den Protokollen zu finden sind, helfen sie sehr dabei, die tatsächlichen Vorgänge aufzudecken. 

IBM Xforce Exchange ist ein Forum, in dem viele Sicherheitsvorfälle gemeldet werden, die für diejenigen relevant sind, die für die Aufrechterhaltung der IT-Sicherheit verantwortlich sind. In diesem Blog werden wir einen dieser Berichte auswählen und prüfen, wie wir die darin enthaltenen Informationen mit Hilfe der PowerShell, die auf Windows installiert ist und auch unter Linux und Mac OS X verwendet werden kann, um WhoisXML-APIs erweitern können. Wir gehen davon aus, dass Sie über geringe Kenntnisse in der PowerShell-Programmierung verfügen, um der folgenden Beschreibung zu folgen. 

Wir werden passive DNS-Daten verwenden, wie sie von der Reverse DNS API von WhoisXML API bereitgestellt werden: Wir können eine Liste von Netzwerkkommunikationsereignissen erhalten, die von passiven DNS-Sensoren beobachtet wurden und bei denen eine bestimmte IP zu einem tatsächlichen Domainnamen aufgelöst wird. Das bedeutet, dass die gegebene IP zum gegebenen Zeitpunkt unter dem gegebenen Domainnamen im Internet kommuniziert hat; eine Information, die vom Domain Name System selbst nicht erhältlich ist. In der Zwischenzeit hilft es sehr, den Charakter des böswilligen Gegners zu enthüllen, wie die folgenden demonstrativen Untersuchungen zeigen werden. 

1. Abrufen von Daten aus einer IBM XForce-Sammlung 

Unser Thema ist die kürzlich beobachtete Aktivität des Phorphiex-Botnetzes. Ich zitiere die Beschreibung von IBM (unter https://exchange.xforce.ibmcloud.com/collection/Phorpiex-Botnet-Extortion-Activity-Monitoring-76265914d081e79d158260bf5385a9da, besucht am 19. August 2021), 

"Die IBM X-Force-Sammlung wurde erstellt, um Ihnen die neuesten IoCs und Informationen über die Erpressungsaktivitäten des Phorpiex-Botnetzes in unserer Umgebung zur Verfügung zu stellen. Die Sammlung wird automatisch aktualisiert, sobald neue Erkenntnisse festgestellt werden. Bitte beachten Sie, dass die IoCs in dieser Sammlung aktivierbar sind und daher für Blockierungen zum Schutz Ihrer Umgebung verwendet werden können. Aus diesem Grund kann es vorkommen, dass bestimmte IoCs in einem dynamischen Zeitbereich aus der Sammlung entfernt werden, wenn keine weiteren Beweise für die Bösartigkeit des Indikators vorliegen." 

"Das Phorpiex-Botnet war zunächst als Botnet bekannt, das das IRC-Protokoll für seine Operationen verwendete, bevor es zu einer modularen Architektur wechselte. Die Verbreitung erfolgt über Exploit-Kits und durch die Unterstützung anderer Malware-Familien. Mit diesem Erfolg nutzen seine Betreiber nun den Betrieb als Malware-as-a-Service (MaaS). Dieses Angebot ermöglicht es anderen Cyber-Banden, die Botnet-Infrastruktur für ihre bösartigen Absichten zu nutzen. Ein großer Teil der täglichen Bedrohungen sind jedoch die so genannten "Sextortion"-Spam-Kampagnen. Sextortion in Spam-Kampagnen bezieht sich auf die Nötigung von Opfern, innerhalb eines bestimmten Zeitrahmens einen bestimmten Geldbetrag zu zahlen, unter der Drohung, intime Bilder oder Videos des Opfers zu veröffentlichen. Es ist bekannt, dass es sich hierbei um eine gefälschte Drohung handelt, da bisher kein Fall bekannt ist, in dem die Bedrohungsakteure nachweislich im Besitz solchen Materials waren." 

IBM X-Force Exchange bietet eine Sammlung von Berichten mit IP-Adressen, von denen aus die Aktivität dieses Botnetzes in letzter Zeit beobachtet wurde. Zum Zeitpunkt des Schreibens dieses Blogs kann die Liste der IP-Adressen aus den Informationen abgeleitet werden, die von IBM X-Force Exchange heruntergeladen wurden. Sie können nämlich eine Datei von dem oben genannten Link herunterladen, indem Sie die Option "Export" aus dem Menü neben der Schaltfläche "Ich bin betroffen" wählen. Wenn Sie das Format STIX 2.0 wählen, erhalten Sie eine heruntergeladene Datei im Standard-JSON-Format, aus der die IP-Adressen abgeleitet und weiterverarbeitet werden können. 

2. Destillieren von IP-Adressen aus einem Bericht im STIX 2.0-Format 

Unsere heruntergeladene STIX 2.0-Datei haben wir unter dem Namen xfe-collection_76265914d081e79d158260bf5385a9da.json gespeichert. Dann holen wir uns die Liste der IPs mit PowerShell auf diese Weise. In dem Verzeichnis, in dem sich die heruntergeladene Datei befindet, führen wir die folgende Konvertierung durch: 

$data=Get-Content ".\xfe-collection_76265914d081e79d158260bf5385a9da.json" |
ConvertFrom-Json
$data.objects.pattern |
foreach {$_ | Select-String -Pattern '(\d{1,3}\){3}\d{1,3}'} |
foreach {$_.Matches.Value} > ips.csv 

Der erste Befehl konvertiert die Einträge in der Sammlung in ein PowerShell-Objekt. Die zweite Zeile ruft das Musterfeld des JSON ab, das auch die IP-Adresse in einer Zeichenkette enthält. Dann erhalten wir die IPv4-Adresse mit dem Abgleich mit einem regulären Ausdruck. Die resultierende Datei ips.csv enthält eine IP-Adresse pro Zeile. Im nächsten Schritt werden wir ein Skript entwickeln, das diese Datei mit passiven DNS-Informationen unter Verwendung der Reverse IP API ergänzt. 

3. Ein Skript, um die Liste der IPs mit umgekehrten passiven DNS-Daten zu erweitern 

Unser Ziel, eine Liste von IP-Adressen mit umgekehrten passiven DNS-Daten zu erweitern, können wir mit dem PowerShell-Cmdlet mit folgendem Code erreichen (es wird empfohlen, ihn z.B. unter dem Namen ExtendIPCsvWithReversePDNS.ps1 zu speichern): 

#Extends a list of IPs with Reverse IP/DNS lookup results
# The input list does not contain a header and contains valid IPs
#Usage:
# 1. set the environment variable APIKEY to your API key:
#    PS C:\Users\User\WorkingDirectory> $APIKey="YOUR_API_KEY"
# 2. Once done, you can run it like this:
#   PS C:\Users\User\WorkingDirectory> .\ExtendIPCsvWithReversePDNS.ps1
'.\inputfile.csv' '.\outputfile.csv'
# Note: if the output file exists and is not empty, the results will be appended.

[CmdletBinding()]
param(
    [string] $InputFile,
    [string] $OutputFile
)

$BaseUrl = "https://reverse-ip.whoisxmlapi.com/api/v1?apiKey=" + $ENV:APIKEY +"&ip="

Function Convert-FromUnixDate ($UnixDate) {

[timezone]::CurrentTimeZone.ToUniversalTime(([datetime]'1/1/1970').AddSeconds($UnixDate))
}

Import-Csv -Header "IP" -Path $InputFile | ForEach-Object {
Write-Host $_.IP
$URI = $BaseUrl + $_.IP
#Need this to be visible in the catch branch
$IP = $_.IP
$IPData = [PSCustomObject]@{
IP = $IP
}
try{
$APIResponse = Invoke-WebRequest -Uri $URI -UseBasicParsing
$k=0
$Result = ConvertFrom-Json $APIResponse.Content
foreach($row in $Result.result) {
$first_seen = Convert-FromUnixDate $row.first_seen
$last_visit = Convert-FromUnixDate $row.last_visit
Write-Host $k $row.name $first_seen $last_visit
$field1 = "name_" + [string]$k
$field2 = "first_seen_" + [string]$k
$field3 = "last_visit_" + [string]$k
$IPData | Add-Member -MemberType NoteProperty -Name $field1 -Value $row.name
$IPData | Add-Member -MemberType NoteProperty -Name $field2 -Value $first_seen
$IPData | Add-Member -MemberType NoteProperty -Name $field3 -Value $last_visit
$k += 1}
for($l=$k; $l -lt 300; $l++){
$field1 = "name_" + [string]$l
$field2 = "first_seen_" + [string]$l
$field3 = "last_visit_" + [string]$l
$IPData |
    Add-Member -MemberType NoteProperty -Name $field1 -Value " "
$IPData |
    Add-Member -MemberType NoteProperty -Name $field2 -Value " "
$IPData |
    Add-Member -MemberType NoteProperty -Name $field3 -Value " "
}
}
catch{
Write-Host "Ran into an issue: $($PSItem.ToString())"
for($l=0; $l -lt 300; $l++){
$field1 = "name_" + [string]$l
$field2 = "first_seen_" + [string]$l
$field3 = "last_visit_" + [string]$l
$IPData |
    Add-Member -MemberType NoteProperty -Name $field1 -Value " "
$IPData |
    Add-Member -MemberType NoteProperty -Name $field2 -Value " "
$IPData |
    Add-Member -MemberType NoteProperty -Name $field3 -Value " "
}
}
$IPData |
    Export-Csv -Append -NoTypeInformation -Encoding UTF8 $OutputFile
}

Das Skript enthält in den ersten Kommentarzeilen Anweisungen zur Verwendung, damit es in sich schlüssig ist; wir werden später beschreiben, wie es aufgerufen wird. Für den Betrieb des Skripts definieren wir zwei Positionsargumente: die Eingabedatei, die eine Liste von IPs ist, eine pro Zeile, und die Ausgabedatei, an die das Ergebnis angehängt wird. Wir speichern die Basis-URL der API in $BaseUrl. Die Funktion Convert-FromUnicDate dient dem Ziel, die von der API als Epoch zurückgegebenen Zeiten in Datumsangaben zu konvertieren. 

Die Hauptschleife holt sich die IPs durch eine Pipeline. Für jede IP speichern wir den Datensatz in $IPData. Der API-Aufruf und seine Verarbeitung erfolgt in einer try-catch-Schleife, um den Fall zu behandeln, dass etwas schief geht. Wir rufen die API mit Invoke-WebRequest auf und parsen das resultierende JSON mit ConvertFrom-Json. Wir möchten, dass jede IP eine Zeile in der csv-Ausgabedatei ist, also durchlaufen wir das Ergebnisfeld des API-Ergebnisses, das eine Liste von Ergebnissen ist, in einer Schleife und ordnen den Namen, den ersten Besuch und den letzten Besuch eines jeden Datensatzes einem nächsten Feld mit einer Ordnungszahl zu. Da Export-Csv derzeit nicht mit einer variablen Anzahl von Feeds pro Zeile umgehen kann, füllen wir die verbleibenden Felder mit einem Wert von einem einzelnen Leerzeichen als Platzhalter. Dasselbe tun wir im catch-Zweig, um eine leere Zeile zu haben, wenn etwas schief gegangen ist, nachdem wir eine Fehlermeldung auf der Konsole ausgegeben haben. (Beachten Sie, dass die API bis zu 300 Datensätze in einem einzigen Aufruf zurückgibt; wenn die angegebene IP mehr hat, liefert sie uns 300 beliebige Datensätze, wenn sie wie oben aufgerufen wird, daher erzeugen wir hier Zeilen mit 300 Ergebnistriolen. Wir verweisen auf die API-Dokumentation, in der beschrieben wird, wie Sie alle Datensätze erhalten). Schließlich wird das resultierende IPData-Objekt an die csv-Ausgabedatei angehängt. 

Um das Skript zu verwenden, muss die Umgebungsvariable $APIKey auf Ihren aktuellen API-Schlüssel gesetzt werden, d.h. 

$APIKey="IHR_API_KEY"

(Die obige Zeichenkette YOUR_API_KEY ist durch Ihren API-Schlüssel zu ersetzen, den Sie nach der Registrierung unter https://reverse-ip.whoisxmlapi.com/api/signup oder auf Ihrer Kontoseite nach der Registrierung finden). Dann können wir das Skript genau so ausführen, wie im Kommentar am Anfang beschrieben. Wir verwenden es für die Datei ips.csv, die wir zuvor vorbereitet haben, 

PS C:\Users\Benutzer\Arbeitsverzeichnis> .\ExtendIPCsvWithReversePDNS.ps1 '.\ips.csv' '.\ips_result.csv'

Das Ergebnis ist die Datei ips_result.csv, die in eine Tabellenkalkulation importiert oder als Text angezeigt werden kann. Sie enthält eine Kopfzeile und eine Zeile für jede IP wie diese: 

"91.232.140.99", "91.232.140.99.ip.rudna-net.pl", "1/4/2019 8:32:10 PM", "7/16/2021 8:09:19 AM"," "," ","

Wir haben die Zeilen weggelassen, da sie sehr lang sind. 

4. Ergebnisse und Schlussfolgerung 

Wir veröffentlichen die Datendatei hier nicht, da sie bösartige IPs enthält und ziemlich groß ist. Stattdessen fassen wir unsere Ergebnisse zusammen. Wenn Sie sich die Ergebnisse im Detail ansehen, wird deutlich, dass viele dieser IPs nicht in der passiven DNS-Datenbank vorhanden waren. Ein direkter DNS-Lookup hat bestätigt, dass die meisten von ihnen tatsächlich keinen Reverse-DNS-Eintrag haben. Selbst die IPs, die Reverse-Einträge haben, werden in der Regel zu automatisch generierten Namen aufgelöst, die von Kabel- oder Mobilfunkanbietern an dynamische IPs vergeben werden. 

Daraus kann man schließen, dass die Bot-Aktivitäten laut der vorgestellten passiven Reverse-DNS-Analyse der IP-Adressensammlung auf den Rechnern einzelner Abonnenten bei verschiedenen Anbietern basieren. 

Da die passiven DNS-Daten Datumsangaben enthalten und die ursprüngliche STIX 2.0-Datei ebenfalls Datumsangaben enthält, konnten durch die Korrelation der Datumsangaben die tatsächlich betroffenen Domainnamen ermittelt werden. Anhand der Ergebnisse könnte eine Warnung an die betroffenen Provider gesendet werden, die dann ihre Protokolle analysieren und ihre Kunden informieren könnten, die Teil dieses Botnetzes geworden sind, typischerweise als Folge der Aktivität eines Exploit-Kits, das auf sie abzielt. 

Zusammenfassend haben wir auch in technischen Details beschrieben, wie man eine Liste von IPs mit Hilfe der Reverse IP/DNS API um zusätzliche Informationen erweitern kann. Unsere Demonstration hat reale Daten verwendet und zu Konsequenzen geführt, die direkt nützlich sein können. Besuchen Sie https://www.whoisxmlapi.com/, um einen API-Schlüssel zu erhalten, mit dem Sie die oben genannten Ergebnisse selbst reproduzieren oder ähnliche Analysen durchführen können. Es lohnt sich auch, einen Blick auf die anderen leistungsstarken Cybersecurity-Tools der WhoisXML API zu werfen.