From 087d091da2b9f463f5efeea41410b528da2f0f6c Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 13 Jul 2025 02:49:45 +0000 Subject: [PATCH] Translated ['src/generic-methodologies-and-resources/basic-forensic-meth --- .../malware-analysis.md | 96 +++++++++++++++++-- 1 file changed, 89 insertions(+), 7 deletions(-) diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/malware-analysis.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/malware-analysis.md index 68c623c54..a806fd054 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/malware-analysis.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/malware-analysis.md @@ -14,7 +14,7 @@ - [Intezer](https://analyze.intezer.com) - [Any.Run](https://any.run/) -## Offline Antivirus και Εργαλεία Ανίχνευσης +## Εργαλεία Αντιϊικού και Ανίχνευσης Εκτός Διαδικτύου ### Yara @@ -68,7 +68,7 @@ clamscan folderpath #Scan the whole folder ### IOCs IOC σημαίνει Δείκτης Συμβιβασμού. Ένα IOC είναι ένα σύνολο **συνθηκών που προσδιορίζουν** κάποιο δυνητικά ανεπιθύμητο λογισμικό ή επιβεβαιωμένο **κακόβουλο λογισμικό**. Οι Blue Teams χρησιμοποιούν αυτόν τον τύπο ορισμού για να **αναζητούν αυτόν τον τύπο κακόβουλων αρχείων** στα **συστήματα** και **δίκτυά** τους.\ -Η κοινοποίηση αυτών των ορισμών είναι πολύ χρήσιμη καθώς όταν εντοπίζεται κακόβουλο λογισμικό σε έναν υπολογιστή και δημιουργείται ένα IOC για αυτό το κακόβουλο λογισμικό, άλλες Blue Teams μπορούν να το χρησιμοποιήσουν για να εντοπίσουν το κακόβουλο λογισμικό πιο γρήγορα. +Η κοινή χρήση αυτών των ορισμών είναι πολύ χρήσιμη καθώς όταν ανιχνεύεται κακόβουλο λογισμικό σε έναν υπολογιστή και δημιουργείται ένα IOC για αυτό το κακόβουλο λογισμικό, άλλες Blue Teams μπορούν να το χρησιμοποιήσουν για να προσδιορίσουν το κακόβουλο λογισμικό πιο γρήγορα. Ένα εργαλείο για τη δημιουργία ή την τροποποίηση IOCs είναι το [**IOC Editor**](https://www.fireeye.com/services/freeware/ioc-editor.html)**.**\ Μπορείτε να χρησιμοποιήσετε εργαλεία όπως το [**Redline**](https://www.fireeye.com/services/freeware/redline.html) για να **αναζητήσετε καθορισμένα IOCs σε μια συσκευή**. @@ -92,7 +92,7 @@ Compares process connection endpoints with C2 IOCs (new since version v.10) ``` ### Linux Malware Detect -[**Linux Malware Detect (LMD)**](https://www.rfxn.com/projects/linux-malware-detect/) είναι ένας σαρωτής κακόβουλου λογισμικού για Linux που κυκλοφορεί υπό την άδεια GNU GPLv2, σχεδιασμένος γύρω από τις απειλές που αντιμετωπίζονται σε κοινές φιλοξενούμενες περιβάλλοντα. Χρησιμοποιεί δεδομένα απειλών από συστήματα ανίχνευσης εισβολών στο δίκτυο για να εξάγει κακόβουλο λογισμικό που χρησιμοποιείται ενεργά σε επιθέσεις και δημιουργεί υπογραφές για ανίχνευση. Επιπλέον, τα δεδομένα απειλών προέρχονται επίσης από υποβολές χρηστών με τη δυνατότητα checkout του LMD και πόρους της κοινότητας κακόβουλου λογισμικού. +[**Linux Malware Detect (LMD)**](https://www.rfxn.com/projects/linux-malware-detect/) είναι ένας σαρωτής κακόβουλου λογισμικού για Linux που κυκλοφορεί υπό την άδεια GNU GPLv2, σχεδιασμένος γύρω από τις απειλές που αντιμετωπίζονται σε κοινά φιλοξενούμενα περιβάλλοντα. Χρησιμοποιεί δεδομένα απειλών από συστήματα ανίχνευσης εισβολών στο δίκτυο για να εξάγει κακόβουλο λογισμικό που χρησιμοποιείται ενεργά σε επιθέσεις και δημιουργεί υπογραφές για ανίχνευση. Επιπλέον, τα δεδομένα απειλών προέρχονται επίσης από υποβολές χρηστών με τη δυνατότητα checkout του LMD και πόρους της κοινότητας κακόβουλου λογισμικού. ### rkhunter @@ -102,7 +102,7 @@ sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--sk ``` ### FLOSS -[**FLOSS**](https://github.com/mandiant/flare-floss) είναι ένα εργαλείο που θα προσπαθήσει να βρει κωδικοποιημένες συμβολοσειρές μέσα σε εκτελέσιμα χρησιμοποιώντας διάφορες τεχνικές. +[**FLOSS**](https://github.com/mandiant/flare-floss) είναι ένα εργαλείο που θα προσπαθήσει να βρει κρυμμένες συμβολοσειρές μέσα σε εκτελέσιμα αρχεία χρησιμοποιώντας διάφορες τεχνικές. ### PEpper @@ -118,15 +118,15 @@ sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--sk ### NeoPI -[**NeoPI** ](https://github.com/CiscoCXSecurity/NeoPI)είναι ένα σενάριο Python που χρησιμοποιεί μια ποικιλία **στατιστικών μεθόδων** για να ανιχνεύει **κωδικοποιημένο** και **κρυπτογραφημένο** περιεχόμενο μέσα σε αρχεία κειμένου/σεναρίων. Ο προορισμός του NeoPI είναι να βοηθήσει στην **ανίχνευση κρυφού κώδικα web shell**. +[**NeoPI** ](https://github.com/CiscoCXSecurity/NeoPI)είναι ένα σενάριο Python που χρησιμοποιεί μια ποικιλία **στατιστικών μεθόδων** για να ανιχνεύει **κρυμμένο** και **κρυπτογραφημένο** περιεχόμενο μέσα σε αρχεία κειμένου/σεναρίων. Ο προορισμός του NeoPI είναι να βοηθήσει στην **ανίχνευση κρυφού κώδικα web shell**. ### **php-malware-finder** -[**PHP-malware-finder**](https://github.com/nbs-system/php-malware-finder) κάνει το καλύτερο δυνατό για να ανιχνεύσει **κωδικοποιημένο**/**ύποπτο κώδικα** καθώς και αρχεία που χρησιμοποιούν **συναρτήσεις PHP** που συχνά χρησιμοποιούνται σε **malwares**/webshells. +[**PHP-malware-finder**](https://github.com/nbs-system/php-malware-finder) κάνει το καλύτερο δυνατό για να ανιχνεύσει **κρυμμένο**/**ύποπτο κώδικα** καθώς και αρχεία που χρησιμοποιούν συναρτήσεις **PHP** που συχνά χρησιμοποιούνται σε **malwares**/webshells. ### Apple Binary Signatures -Όταν ελέγχετε κάποιο **δείγμα malware** θα πρέπει πάντα να **ελέγχετε την υπογραφή** του δυαδικού, καθώς ο **προγραμματιστής** που το υπέγραψε μπορεί ήδη να είναι **σχετικός** με **malware.** +Όταν ελέγχετε κάποιο **δείγμα malware** θα πρέπει πάντα να **ελέγχετε την υπογραφή** του δυαδικού αρχείου καθώς ο **προγραμματιστής** που το υπέγραψε μπορεί ήδη να είναι **σχετικός** με **malware.** ```bash #Get signer codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier" @@ -151,4 +151,86 @@ spctl --assess --verbose /Applications/Safari.app Όταν οι πληροφορίες αποθηκεύονται σε logs μπορείτε να **ελέγξετε στατιστικά όπως πόσες φορές κάθε αρχείο ενός web server προσπελάστηκε καθώς ένα web shell μπορεί να είναι ένα από τα πιο**. +--- + +## Αποκατάσταση Δυναμικού Έλεγχου Ροής (JMP/CALL RAX Dispatchers) + +Οι σύγχρονες οικογένειες κακόβουλου λογισμικού εκμεταλλεύονται έντονα την απόκρυψη του Γραφήματος Ροής Ελέγχου (CFG): αντί για άμεσο άλμα/κλήση υπολογίζουν τον προορισμό κατά την εκτέλεση και εκτελούν ένα `jmp rax` ή `call rax`. Ένας μικρός *dispatcher* (συνήθως εννέα εντολές) καθορίζει τον τελικό στόχο ανάλογα με τις σημαίες `ZF`/`CF` της CPU, σπάζοντας εντελώς την στατική ανάκτηση CFG. + +Η τεχνική – που παρουσιάζεται από τον φορτωτή SLOW#TEMPEST – μπορεί να καταπολεμηθεί με μια ροή εργασίας τριών βημάτων που βασίζεται μόνο στο IDAPython και τον εξομοιωτή CPU Unicorn. + +### 1. Εντοπίστε κάθε έμμεσο άλμα / κλήση +```python +import idautils, idc + +for ea in idautils.FunctionItems(idc.here()): +mnem = idc.print_insn_mnem(ea) +if mnem in ("jmp", "call") and idc.print_operand(ea, 0) == "rax": +print(f"[+] Dispatcher found @ {ea:X}") +``` +### 2. Εξαγωγή του byte-code του dispatcher +```python +import idc + +def get_dispatcher_start(jmp_ea, count=9): +s = jmp_ea +for _ in range(count): +s = idc.prev_head(s, 0) +return s + +start = get_dispatcher_start(jmp_ea) +size = jmp_ea + idc.get_item_size(jmp_ea) - start +code = idc.get_bytes(start, size) +open(f"{start:X}.bin", "wb").write(code) +``` +### 3. Εξομοιώστε το δύο φορές με Unicorn +```python +from unicorn import * +from unicorn.x86_const import * +import struct + +def run(code, zf=0, cf=0): +BASE = 0x1000 +mu = Uc(UC_ARCH_X86, UC_MODE_64) +mu.mem_map(BASE, 0x1000) +mu.mem_write(BASE, code) +mu.reg_write(UC_X86_REG_RFLAGS, (zf << 6) | cf) +mu.reg_write(UC_X86_REG_RAX, 0) +mu.emu_start(BASE, BASE+len(code)) +return mu.reg_read(UC_X86_REG_RAX) +``` +Εκτελέστε `run(code,0,0)` και `run(code,1,1)` για να αποκτήσετε τους στόχους του *ψευδούς* και *αληθινού* κλάδου. + +### 4. Επαναφορά άμεσου άλματος / κλήσης +```python +import struct, ida_bytes + +def patch_direct(ea, target, is_call=False): +op = 0xE8 if is_call else 0xE9 # CALL rel32 or JMP rel32 +disp = target - (ea + 5) & 0xFFFFFFFF +ida_bytes.patch_bytes(ea, bytes([op]) + struct.pack('