J'ai exécuté un scanner de logiciels malveillants sur mon site et il a marqué un tas de fichiers EXE zippés en tant que fichiers à risque potentiel (ces fichiers ont été téléchargés par les utilisateurs). Comme je suis capable de décompresser les fichiers sur mon Mac, je suppose que ce sont de vrais fichiers Zip et pas seulement quelque chose comme des fichiers renommés PHP.
Le fichier Zip ne devrait donc pas présenter de risque pour mon serveur Web, non?
S'ils sont en effet des fichiers exe Windows zippés, ils devraient être inoffensifs pour votre système Linux, sauf si vous avez quelque chose comme Wine en place qui pourrait essayer de les exécuter.
Mais s'ils se trouvent sur votre chemin Web, ils pourraient être des logiciels malveillants et poser un gros risque pour les visiteurs de vos sites Web (et vous à son tour, si vous finissent par être marqués comme source de logiciels malveillants et les utilisateurs reçoivent de vilains avertissements lorsqu'ils essaient de visiter votre site).
Puisque je suis capable de décompresser les fichiers sur mon mac, je suppose que ce sont de vrais fichiers Zip et pas seulement quelque chose comme des fichiers php renommés.
Alors que vous avez probablement raison dans ce cas, votre hypothèse pourrait ne pas toujours tenir. Une archive Zip reste valide même si vous y ajoutez des données arbitraires , il est donc tout à fait possible de créer un fichier qui est simultanément une archive Zip valide contenant des données innocentes et également un PHP malveillant scénario. Ce n'est même pas particulièrement difficile; il suffit de concaténer le code PHP et le fichier Zip, et assurez-vous (par exemple en utilisant __halt_compiler()
) que PHP n'essaiera pas de analyser les données d'archive Zip ajoutées.
Cette astuce est légitimement utilisée pour créer des fichiers Zip auto-extractibles, mais il est parfaitement possible de ajouter de la même manière toutes autres données cachées ou code exécutable dans un fichier Zip. Certains programmes peuvent refuser d'ouvrir de tels fichiers Zip modifiés (mais si c'est le cas, ils violent techniquement les spécifications de format Zip), ou ils peuvent identifier le fichier comme autre chose qu'un fichier Zip par défaut, mais généralement, si vous alimentez un tel fichier dans un code qui attend un fichier Zip, il sera probablement accepté comme tel.
Une utilisation malveillante plus courante de ces astuces consiste à déguiser le code d'exploitation dans un conteneur basé sur Zip (par exemple un fichier JAR) comme quelque chose d'inoffensif (comme une image GIF, comme dans le GIFAR exploit), mais il n'y a aucune raison pour qu'il ne puisse pas être utilisé dans l'autre sens également, par exemple pour contourner un filtre de téléchargement de fichiers naïf qui interdit le téléchargement de scripts PHP mais autorise les fichiers Zip, sans vérifier si le fichier téléchargé peut être les deux en même temps.
Il y a au moins deux considérations notables à prendre en compte:
Ainsi, en fonction de ce que fait votre serveur, le fichier pourrait potentiellement être dangereux pour votre serveur ou d'autres utilisateurs. Étant donné que je me méfie assez des EXE téléchargés sur Internet, je dirais que les téléchargeurs potentiels sont les utilisateurs les plus potentiels à risque ici.
Vous pouvez vérifier si les fichiers peuvent être exécutés sur votre serveur Linux en les vérifiant simplement avec file FILENAME.exe
commande. Les binaires Elf (le format exécutable utilisé sous Linux) peuvent être nommés avec .exe
extension pour confondre un administrateur Linux sans méfiance, c'est donc probablement une bonne idée de faire cette vérification avant de croire aveuglément que ces fichiers ne sont pas exécutables.
Je suis surpris que personne n'ait mentionné que des données peuvent s'avérer (ou être rendues) nuisibles à tout programme (buggy). C'est la base du flou. Par exemple, vous pourriez avoir un fichier JPEG (ou de type JPEG) qui provoque un débordement de tampon sur les décodeurs JPEG (spécifiques?), Provoquant tout, d'un déni de service à l'exécution de code arbitraire. Il s'agit de renverser un programme informatique existant; pas besoin d'apporter un nouvel exécutable! Et c'est la raison pour laquelle le sandboxing, le nettoyage des entrées et les principes de moindre privilège sont nécessaires.
Donc, dans votre cas, vous pourriez avoir un fichier Zip causant des problèmes sur les moteurs de décodage Zip (spécifiques?). Pas besoin que le fichier Zip contienne un exécutable natif pour qu'il soit nuisible.
Cela dit, votre scanner fonctionne à un autre niveau, plus grossier. Si le type de risque dont je parle existait dans ces fichiers, vous avez déjà été touché au moment où vous les avez traités :).
Comme je suis capable de décompresser les fichiers sur mon Mac, je suppose que ce sont de vrais fichiers Zip et pas seulement quelque chose comme des fichiers renommés PHP.
Il y a eu des attaques qui intègrent des données et présentent toujours des fichiers comme valides. Dans un serveur mal configuré ou dans une application mal codée, cela pourrait entraîner l'exécution de code sur votre serveur.
Donc, faites attention à cela aussi.
Une vérification supplémentaire que vous devriez idéalement mettre en place est la méthode php finfo pour vérifier si les fichiers téléchargés par les utilisateurs sont réellement ce que vous avez autorisés, et non quelque chose que les utilisateurs ont renommé les fichiers juste pour tromper le système.