know-how:threat_intel
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
know-how:threat_intel [2022/10/13 14:06] – [Logging] cc | know-how:threat_intel [2024/03/26 08:24] (aktuell) – [Schnittstelle f. Datebank / Input der Daten] cc | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ~~ODT~~ | ||
====== Threat Intelligence ====== | ====== Threat Intelligence ====== | ||
+ | FIXME work in progress / Analyse der gesammelten Firewall Drops / Datenbank Design usw.. | ||
===== Zielsetzung ===== | ===== Zielsetzung ===== | ||
* Alle Drops mit bestimmten Eigenschaften die auf der Firewall extern einschlagen protokollieren um daraus Hinweise auf gehackte Systeme zu gewinnen | * Alle Drops mit bestimmten Eigenschaften die auf der Firewall extern einschlagen protokollieren um daraus Hinweise auf gehackte Systeme zu gewinnen | ||
* Interessant wird dann die andere Richtung auf anderen Systemen - welche Endgeräte versuchen auf IP Adressen von Intern nach Extern zuzugreifen auf IPs die aus den historischen Daten gewonnen wurden | * Interessant wird dann die andere Richtung auf anderen Systemen - welche Endgeräte versuchen auf IP Adressen von Intern nach Extern zuzugreifen auf IPs die aus den historischen Daten gewonnen wurden | ||
+ | ===== Datenbank ===== | ||
+ | * Ich möchte in der Lage sein SQL Queries auf die Daten abzusetzen | ||
+ | < | ||
+ | MariaDB [inteldb]> | ||
+ | +---------------+--------------+------+-----+---------------------+-------------------------------+ | ||
+ | | Field | Type | Null | Key | Default | ||
+ | +---------------+--------------+------+-----+---------------------+-------------------------------+ | ||
+ | | hash | char(64) | ||
+ | | original | ||
+ | | src | varchar(100) | NO | MUL | NULL | | | ||
+ | | dst | char(40) | ||
+ | | dpt | int(11) | ||
+ | | spt | int(11) | ||
+ | | proto | varchar(15) | ||
+ | | country | ||
+ | | originalDate | ||
+ | | insertionDate | timestamp | ||
+ | +---------------+--------------+------+-----+---------------------+-------------------------------+ | ||
+ | </ | ||
+ | * Storage Engine **default-storage-engine = Aria** - als Nachfolger von **myisam** - ich benötige Crash resistenten Table | ||
+ | ===== Schnittstelle f. Datenbank / Input der Daten ===== | ||
+ | * syslog-ng loggt direkt auf eine pipe / für das Skript macht es keinen Unterschied ob ein Logfile gelesen wird oder die Pipe geöffnet | ||
+ | |||
+ | < | ||
+ | |||
+ | <?php | ||
+ | // Shouldn' | ||
+ | // | ||
+ | pcntl_async_signals(true); | ||
+ | pcntl_signal(SIGINT,' | ||
+ | |||
+ | |||
+ | $db_servername=""; | ||
+ | $db_username=""; | ||
+ | $db_name=""; | ||
+ | $db_password=""; | ||
+ | |||
+ | |||
+ | require_once(" | ||
+ | use GeoIp2\Database\Reader; | ||
+ | |||
+ | if(!isset($argc) || $argc !== 2 ) | ||
+ | { | ||
+ | echo " | ||
+ | exit(2); | ||
+ | } | ||
+ | |||
+ | $input_file=$argv[1]; | ||
+ | |||
+ | if(!is_readable($input_file)) | ||
+ | { | ||
+ | echo " | ||
+ | exit(2); | ||
+ | } | ||
+ | |||
+ | $fp = fopen($input_file," | ||
+ | |||
+ | global $entriesOk; | ||
+ | global $entriesFail; | ||
+ | |||
+ | |||
+ | $entriesOk=0; | ||
+ | $entriesFail=0; | ||
+ | |||
+ | |||
+ | $db_connection = new mysqli($db_servername, | ||
+ | |||
+ | if($db_connection-> | ||
+ | { | ||
+ | echo " | ||
+ | exit(2); | ||
+ | } | ||
+ | |||
+ | $insert_statement=$db_connection-> | ||
+ | |||
+ | while( ($line=fgets($fp, | ||
+ | { | ||
+ | //echo $line." | ||
+ | $matches=array(); | ||
+ | |||
+ | $matches_count=preg_match_all('/ | ||
+ | |||
+ | if($matches_count > 1 ) | ||
+ | { | ||
+ | |||
+ | $inputMaster=array(); | ||
+ | |||
+ | $matches=$matches[0]; | ||
+ | |||
+ | $wrongCommit=false; | ||
+ | |||
+ | for($i=0; $i< | ||
+ | { | ||
+ | $cut_array=explode(" | ||
+ | if(count($cut_array)== 2) | ||
+ | { | ||
+ | if(!isset($inputMaster[$cut_array[0]])) | ||
+ | { | ||
+ | $inputMaster[$cut_array[0]]=$cut_array[1]; | ||
+ | |||
+ | if(isset($inputMaster[" | ||
+ | { | ||
+ | $wrongCommit=true; | ||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
+ | else | ||
+ | { | ||
+ | # | ||
+ | if(isset($inputMaster[" | ||
+ | { | ||
+ | $wrongCommit=true; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | if($wrongCommit===false) | ||
+ | { | ||
+ | |||
+ | //Jan 26 01:46:54 | ||
+ | if(preg_match('/ | ||
+ | { | ||
+ | $inputMaster[" | ||
+ | $inputMaster[" | ||
+ | $inputMaster[" | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | $inputMaster[" | ||
+ | $inputMaster[" | ||
+ | $inputMaster[" | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | $inputMaster[" | ||
+ | $inputMaster[" | ||
+ | if(isset($inputMaster[" | ||
+ | { | ||
+ | | ||
+ | |||
+ | // | ||
+ | // | ||
+ | |||
+ | } | ||
+ | else | ||
+ | { | ||
+ | $inputMaster[" | ||
+ | $inputMaster[" | ||
+ | } | ||
+ | |||
+ | |||
+ | if(isset($inputMaster[" | ||
+ | { | ||
+ | $inputMaster[" | ||
+ | |||
+ | } | ||
+ | else | ||
+ | { | ||
+ | $inputMaster[" | ||
+ | } | ||
+ | |||
+ | |||
+ | if(!isset($inputMaster[" | ||
+ | { | ||
+ | $inputMaster[" | ||
+ | } | ||
+ | |||
+ | if(!isset($inputMaster[" | ||
+ | { | ||
+ | $inputMaster[" | ||
+ | } | ||
+ | |||
+ | |||
+ | $entriesOk++; | ||
+ | |||
+ | $insert_statement-> | ||
+ | |||
+ | // | ||
+ | |||
+ | if($insert_statement-> | ||
+ | { | ||
+ | $entriesOk++; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | $entriesFail++; | ||
+ | echo "MYSQL Failure: " | ||
+ | print_r($inputMaster); | ||
+ | } | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | echo " | ||
+ | |||
+ | // | ||
+ | // | ||
+ | |||
+ | $entriesFail++; | ||
+ | } | ||
+ | |||
+ | if( !( $entriesOk % 1000) || !( $entriesFail %1000) ) | ||
+ | { | ||
+ | echo " | ||
+ | echo " | ||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
+ | else | ||
+ | { | ||
+ | $entriesFail++; | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | echo "\n Program quit !"; | ||
+ | echo " | ||
+ | echo " | ||
+ | |||
+ | |||
+ | exit(0); | ||
+ | |||
+ | |||
+ | function getCountry($ip) | ||
+ | { | ||
+ | try | ||
+ | { | ||
+ | | ||
+ | | ||
+ | |||
+ | } | ||
+ | catch(Exception $e) | ||
+ | { | ||
+ | return " | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | function exit_handler($signal) | ||
+ | { | ||
+ | echo " | ||
+ | exit(2); | ||
+ | } | ||
+ | |||
+ | ?> | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
===== Logging ===== | ===== Logging ===== | ||
- | * Zentraler Server Beispiel syslog server auf 192.168.1.1 **syslog.conf** | + | * Zentraler Server Beispiel syslog server auf 192.168.1.1 |
< | < | ||
.. | .. | ||
Zeile 12: | Zeile 275: | ||
.. | .. | ||
</ | </ | ||
+ | |||
+ | * openwrt **/ | ||
+ | |||
+ | < | ||
+ | .. | ||
+ | option log_ip ' | ||
+ | option log_port ' | ||
+ | option log_proto ' | ||
+ | .. | ||
+ | </ | ||
+ | |||
+ | ===== API ===== | ||
+ | * API unter: https:// | ||
+ | * Parameter: **requestIP** -> IPv4 oder IPv6 IP Adresse | ||
+ | * Parameter: **apiKey** -> API Key von Pannonia IT Results ohne Delay | ||
+ | * Paramter: **format** -> **csv** - Results im CSV Format / optional per Default im json Format | ||
+ | * Beispiel: https:// | ||
+ | * Ergebnisse als JSON Results: | ||
+ | < | ||
+ | [{" | ||
+ | </ | ||
+ | |||
+ | |||
know-how/threat_intel.txt · Zuletzt geändert: 2024/03/26 08:24 von cc