Domanda:
Re-ing sicuro uno script PHP
user187
2013-03-27 13:23:11 UTC
view on stackexchange narkive permalink

Ho uno script PHP molto disordinato di cui ho bisogno per determinare la funzione. Non riesco a capire bene il codice, è davvero disordinato. Ora ho pensato che forse avrei potuto decodificare questo script.

Quello che voglio fare è eseguire questo script (eventualmente con parti specifiche commentate) per ottenere una migliore comprensione di quale parte dello script fa cosa. Con queste informazioni, dovrei essere in grado di ottenere una piena comprensione dello script.

Tuttavia, non voglio cambiare nulla nel database sul server, non voglio che lo script vada a spedire cose, ecc. Fondamentalmente, lo script dovrebbe essere totalmente separato dal mondo, ma voglio vedere cosa cerca di fare. Quindi, ad esempio, quando lo script esegue una funzione mail () , voglio vedere che una mail sarebbe stata inviata se lo script non fosse separato dal mondo.

Ho quindi bisogno di una copia dell'installazione del server (Ubuntu Server 12.04), che non è così difficile. La parte difficile è che ho bisogno di un sistema che agisca come se fosse il mondo esterno, ma in realtà è un sistema di registrazione in cui posso vedere cosa sta succedendo.

Esistono strumenti in grado di farlo? In caso contrario, come dovrei costruirlo da solo?

Il tag [tag: software] è necessario qui? http://meta.reverseengineering.stackexchange.com/q/3/189
@AshRj l'ho rimosso.
Quattro risposte:
#1
+8
amccormack
2013-03-28 04:21:19 UTC
view on stackexchange narkive permalink

Suggerirei di utilizzare macchine virtuali per testare il tuo campione. Se l'esempio sta per interagire con altre macchine (ad esempio, se invia posta ma il server di posta si trova in mail.example.com), allora probabilmente vorrai emulare una configurazione a due macchine. Se tutto è già configurato sulla macchina in cui verrà eseguito l'esempio (quindi le chiamate di posta vengono effettuate localmente), probabilmente avrai bisogno solo di una macchina virtuale.

Configura una rete solo host di macchine virtuali

Puoi usare VMWare se ce l'hai oppure puoi usare VirtualBox, che è gratuito. Se utilizzi una rete solo host (istruzioni VMWare o VirtualBox), puoi rilevare il traffico di rete delle VM dall'interno del tuo host, ma il traffico non lascerà mai il tuo host .

Prima di eseguire l'esempio

Se sospetti che questo script php cambierà lo stato della tua macchina virtuale (ad esempio eliminerà i database o sovrascriverà i file), allora ti suggerisco di prendere un istantanea. In questo modo puoi sempre annullare tutte le modifiche apportate durante l'esecuzione dello script. VMWare o VirtualBox.

Esecuzione dell'esempio

Una volta creata la rete virtuale, puoi eseguire l'esempio durante l'acquisizione traffico con uno strumento come wirehark. Questo catturerà tutto il traffico di rete

Ottenere feedback dall'esterno

Come lo hai descritto, il tuo campione probabilmente non avrà bisogno di comunicare con servizi falsi, ma se lo fa, ecco un poche applicazioni che puoi esaminare.

  • Windows
    • FakeNet come menzionato da Mick, questa è una buona soluzione se stai utilizzando Windows XP SP3 .
  • Linux
    • inetsim: simulerà le risposte per i protocolli a livello di applicazione come HTTP, TCP o SMTP. Può anche rispondere alle richieste DNS.
    • honeyd - Questo è più leggero di inetsim ma simulerà anche le risposte per i protocolli a livello di applicazione come HTTP, TCP o SMTP. Può anche rispondere alle richieste DNS.
    • farpd: questa utility è molto utile se non conosci l'indirizzo IP che verrà richiesto. Questa applicazione può essere utilizzata per reindirizzare il traffico IP alla tua macchina virtuale.
#2
+5
Mick
2013-03-27 19:12:33 UTC
view on stackexchange narkive permalink

Potresti essere in grado di utilizzare FakeNet open source per simulare una rete reale.

Tuttavia, FakeNet è progettato per essere eseguito su un sistema XP SP3 , quindi utilizzarlo richiederebbe di garantire che il traffico sia instradato dal tuo sistema Ubuntu / VM a un sistema XP SP3 /VM.

Ci sono probabilmente alcune alternative FakeNet basate su Linux là fuori, ma ho già usato FakeNet durante l'analisi del malware Windows e funziona molto bene.

Caratteristiche

  • Supporta DNS, HTTP e SSL
  • Il server HTTP serve sempre un file e cerca di servire un file significativo; se il malware richiede un .jpg, viene fornito un .jpg formattato correttamente, ecc. I file serviti sono configurabili dall'utente.
  • Possibilità di reindirizzare tutto il traffico all'host locale, incluso il traffico destinato a un hard-coded Indirizzo IP.
  • Estensioni Python, inclusa un'estensione di esempio che implementa SMTP e SMTP su SSL.
  • Capacità incorporata di creare un file di acquisizione (.pcap) per i pacchetti su localhost.
  • Listener fittizio che ascolterà il traffico su qualsiasi porta, rileverà e decodificherà automaticamente il traffico SSL e visualizzerà il contenuto nella console.
#3
+5
Daniel W. Steinbrook
2013-03-28 07:34:33 UTC
view on stackexchange narkive permalink

Una soluzione più generale consiste nell'usare qualcosa come runkit, un'estensione PHP per intercettare chiamate di funzioni arbitrarie. Piuttosto che provare a simulare una rete (l'opzione più sicura per la tua situazione), se invece conoscessi il set completo di funzioni che desideri impedire che vengano chiamate, potresti semplicemente runkit_function_redefine ciascuna per registrare un messaggio invece.

Lo svantaggio di questo tipo di approccio è che devi predefinire ciò che vuoi catturare dove potresti non sapere in anticipo.
#4
+3
jg0
2013-03-28 07:58:40 UTC
view on stackexchange narkive permalink

Dato che hai già il file sorgente, credo che ci sia un approccio più semplice e facile (rispetto al reindirizzamento del traffico di rete a livelli bassi sarebbe quello di intercettare i metodi chiamati.)

In primo luogo, identificare e sostituire i metodi nel file php (ricordarsi di farne una copia!). Ad esempio, se desideri intercettare mail () , puoi trovare mail ( e sostituirlo con shim_mail (. Puoi anche farlo per altri metodi interessanti come mysql_connect () .

Al termine, aggiungi include 'shim.php'; all'inizio del file. Lo "shim" fungerà da livello tra lo script php e il metodo effettivo, quindi puoi scegliere di registrarlo in un file di testo, consentirne l'esecuzione o persino indirizzarlo a un database di replica !

shim.php

  $ logfile = 'log.txt'; function shim_mysql_connect ($ server, $ username, $ password, $ new_link = false, $ client_flags = 0) {file_put_contents ($ logfile, file_get_contents ($ logfile). "\ r \ nmysql_connect () a". $ server. "con nome utente". $ nomeutente. "e password". $ password); // intercetta il comando e puntalo a 'honeypot' return mysql_connect ('your_new_server', 'username', 'password');} funzione shim_mail ($ to, $ subject, $ message, $ a dditional_headers = '', $ additional_parameters = '') {file_put_contents ($ logfile, file_get_contents ($ logfile). "\ r \ nmail () a". $ a. "con soggetto". $ subject. "e messaggio". $ messaggio); // non inviare effettivamente un'e-mail}? >  

In questo file shim, puoi aggiungere funzioni che ti interessa scoprire (semplicemente copiando la stessa firma del metodo del file originale e stampa dei relativi log). Osservando il registro, probabilmente puoi scoprire molto di più sullo script php!

(mentre stavo componendo questo, mi sono reso conto che anche Daniel W. Steinbrook ha escogitato un metodo simile. Il mio metodo ha un leggero vantaggio di essere più semplice senza aggiungere nuove dipendenze, ma il runkit suona come un corretto . In ogni caso, puoi semplicemente sceglierne uno che funzioni!)

La semplicità di questa tecnica è degna di nota.
Questa tecnica NON è sufficiente. Http://www.php.net/manual/en/functions.variable-functions.php


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...