Question:
Sécuriser RE-ing un script PHP
user187
2013-03-27 13:23:11 UTC
view on stackexchange narkive permalink

J'ai un script PHP très compliqué dont j'ai besoin pour déterminer la fonction. Je ne comprends pas très bien le code, il est vraiment désordonné. Maintenant, j'ai pensé que je pourrais peut-être faire de l'ingénierie inverse de ce script.

Ce que je veux faire, c'est exécuter ce script (éventuellement avec des parties spécifiques commentées) pour mieux comprendre quelle partie du script fait quoi. Avec ces informations, je devrais être en mesure de comprendre pleinement le script.

Cependant, je ne veux rien changer dans la base de données sur le serveur, je ne veux pas que le script va mail, etc. Fondamentalement, le script devrait être totalement séparé du monde, mais je veux voir ce qu'il essaie de faire. Ainsi, par exemple, lorsque le script exécute une fonction mail () , je veux voir qu'un e-mail aurait été envoyé si le script n'était pas séparé du monde.

J'ai donc besoin d'une copie de l'installation du serveur (Ubuntu Server 12.04), ce qui n'est pas si difficile. Le plus dur est que j'ai besoin d'un système qui agit comme si c'était le monde extérieur, mais qui est en fait un système de journalisation dans lequel je peux voir ce qui se passe.

Y a-t-il des outils qui peuvent faire cela? Sinon, comment dois-je procéder pour le construire moi-même?

La balise [tag: software] est-elle nécessaire ici? http://meta.reverseengineering.stackexchange.com/q/3/189
@AshRj Je l'ai enlevé.
Quatre réponses:
#1
+8
amccormack
2013-03-28 04:21:19 UTC
view on stackexchange narkive permalink

Je recommanderais d'utiliser des machines virtuelles pour tester votre échantillon. Si l'exemple va interagir avec d'autres machines (par exemple, s'il envoie du courrier mais que le serveur de messagerie se trouve sur mail.example.com), vous souhaiterez probablement émuler une configuration à deux machines. Si tout est déjà configuré sur la machine sur laquelle votre échantillon sera exécuté (les appels de messagerie sont donc effectués localement), vous n'aurez probablement besoin que d'une seule machine virtuelle.

Configurer un réseau d'hôte de machine virtuelle uniquement

Vous pouvez utiliser VMWare si vous l'avez ou vous pouvez utiliser la VirtualBox, qui est gratuite. Si vous utilisez un réseau d'hôte uniquement (instructions VMWare ou VirtualBox), vous pouvez détecter le trafic réseau des VM depuis votre hôte, mais le trafic ne quittera jamais votre hôte. .

Avant d'exécuter l'exemple

Si vous pensez que ce script php changera l'état de votre machine virtuelle (par exemple, il supprimera des bases de données ou écrasera des fichiers), je vous suggère de prendre un instantané. De cette façon, vous pouvez toujours annuler toutes les modifications apportées lors de l'exécution du script. Instructions VMWare ou VirtualBox.

Exécution de l'exemple

Une fois le réseau virtuel construit, vous pouvez exécuter votre exemple lors de la capture trafic avec un outil tel que WireShark. Cela capturera tout le trafic réseau

Obtenir des commentaires extérieurs

Comme vous l'avez décrit, votre échantillon n'aura probablement pas besoin de communiquer avec de faux services, mais si c'est le cas, voici un quelques applications que vous pouvez consulter.

  • Windows
    • FakeNet comme mentionné par Mick, c'est une bonne solution si vous utilisez Windows XP SP3 .
  • Linux
    • inetsim - Cela simulera les réponses pour les protocoles de niveau application tels que HTTP, TCP ou SMTP. Il peut également répondre aux requêtes DNS.
    • honeyd - C'est plus léger qu'inetsim mais simulera également les réponses pour les protocoles de niveau application tels que HTTP, TCP ou SMTP. Il peut également répondre aux requêtes DNS.
    • farpd - Cet utilitaire est très utile si vous ne connaissez pas l'adresse IP qui sera demandée. Cette application peut être utilisée pour rediriger le trafic IP vers votre machine virtuelle.
#2
+5
Mick
2013-03-27 19:12:33 UTC
view on stackexchange narkive permalink

Vous pourrez peut-être utiliser le FakeNet open-source pour simuler un réseau réel.

Cependant, FakeNet est conçu pour être exécuté sur un système XP SP3 , donc son utilisation vous obligerait à vous assurer que le trafic est acheminé de votre système / VM Ubuntu vers un système XP sp3 /VM.

Il existe probablement des alternatives FakeNet basées sur Linux, mais j'ai déjà utilisé FakeNet pour analyser les logiciels malveillants Windows et cela fonctionne très bien.

Caractéristiques

  • Prend en charge DNS, HTTP et SSL
  • Le serveur HTTP sert toujours un fichier et essaie de servir un fichier significatif; si le malware demande un .jpg, alors un .jpg correctement formaté est diffusé, etc. Les fichiers servis sont configurables par l'utilisateur.
  • Possibilité de rediriger tout le trafic vers l'hôte local, y compris le trafic destiné à un serveur codé en dur Adresse IP.
  • Extensions Python, y compris un exemple d'extension qui implémente SMTP et SMTP sur SSL.
  • Capacité intégrée de créer un fichier de capture (.pcap) pour les paquets sur l'hôte local.
  • Écoute factice qui écoutera le trafic sur n'importe quel port, détectera et déchiffrera automatiquement le trafic SSL et affichera le contenu sur la console.
#3
+5
Daniel W. Steinbrook
2013-03-28 07:34:33 UTC
view on stackexchange narkive permalink

Une solution plus générale consiste à utiliser quelque chose comme runkit, une extension PHP pour intercepter les appels de fonction arbitraires. Plutôt que d'essayer de simuler un réseau (l'option la plus sûre pour votre situation), si vous connaissiez à la place l'ensemble complet des fonctions que vous vouliez empêcher d'être appelées, vous pourriez simplement runkit_function_redefine chacune pour enregistrer un message à la place.

L'inconvénient de ce type d'approche est que vous devez prédéfinir ce que vous voulez attraper là où vous ne le savez peut-être pas à l'avance.
#4
+3
jg0
2013-03-28 07:58:40 UTC
view on stackexchange narkive permalink

Puisque vous avez déjà le fichier source, je pense qu'il existe une approche plus simple et plus simple (par rapport au réacheminement du trafic réseau à de faibles niveaux, il faudrait intercepter les méthodes appelées.)

Premièrement, identifier et remplacer les méthodes dans votre fichier php (n'oubliez pas d'en faire une copie!). Par exemple, si vous souhaitez intercepter mail () , vous pouvez rechercher mail ( et le remplacer par shim_mail (. Vous pouvez également le faire pour d'autres méthodes intéressantes telles que mysql_connect () .

Une fois que vous avez terminé, ajoutez include 'shim.php'; en haut de votre fichier. Le "shim" agira comme une couche entre le script php et la méthode réelle, vous pouvez donc choisir de le consigner dans un fichier texte, lui permettre de s'exécuter ou même le diriger vers une base de données réplique !

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 () to". $ server. "with username". $ username. "and password". $ password); // intercepter la commande et la pointer vers le 'pot de miel' return mysql_connect ('your_new_server', 'username', 'password');} function shim_mail ($ to, $ subject, $ message, $ a dditional_headers = '', $ additional_parameters = '') {file_put_contents ($ logfile, file_get_contents ($ logfile). "\ r \ nmail () à". $ à. "avec sujet". $ sujet. "et message". $ message); // n'envoyez pas réellement d'e-mail}? >  

Dans ce fichier shim, vous pouvez ajouter des fonctions que vous souhaitez découvrir (simplement en copiant la même signature de méthode que le fichier original et impression des journaux pertinents). En observant le journal, vous pouvez probablement en savoir plus sur le script php!

correct . Dans tous les cas, vous pouvez simplement en choisir un qui fonctionne!)

La simplicité de cette technique est à noter.
Cette technique n'est PAS suffisante.http: //www.php.net/manual/en/functions.variable-functions.php


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...