Identificando e optmizando segurança para aplicações PHP com Docker

Identificando e optmizando segurança para aplicações PHP com Docker

Um dos problemas mais comuns em aplicações PHP são os php shells ou php commanders como muitos dizem. Estes problemas geralmente se dão quando um cracker identifica uma vulnerabilidade na aplicação e faz o processo chamado de owned.

Uma das formas de começar uma análise é identificando strings como CURLOPT_RETURNTRANSFER, .PHP_EOL. , CURLOPT_POSTFIELDS, base64_decode entre outros.

Uma forma muito simples e que pode ser feita diretamente do shell é utilizando o comando find com pipe para Xargs chamando o grep.

find ./*.php -type f -print0 |xargs -0 grep -e "urldecode" -e "CURLOPT_RETURNTRANSFER" -e ".PHP_EOL." -e "CURLOPT_POSTFIELDS" -e "base64_encode" -e "base64_decode"

Este comando irá trazer uma lista de arquivos e respectivas strings contendo estes termos da pesquisa. Exemplo abaixo:

No exemplo acima identificamos um arquivo com um php shell onde um código criptografado com base64 está escontido dentro de um arquivo comum do Wordpress.

Um forma de evitar as execuções destes tipos de comando no Wordpress para minimizar os problemas é adicionando ao disable_functions do php.ini termos comuns utilizados por estes scripts.

#disable functions in Apache2
disable_functions=exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

Uma forma de mapear estas funções para dentro de seu container Docker utilizando o Docker-compose é adicionando a seguinte linha abaixo na lista de volumes mapeados para dentro da aplicação php:

application_wp:
    depends_on:
      - application_db
    image: wordpress:latest
    container_name: application_wp
    networks:
      - "hosting"
    ports:
      - "8080:80"
    restart: always
    links:
      - application_db:mysql
    volumes:
      - ./src:/var/www/html
      - ./php:/usr/local/etc/php

Veja que dentro do mapeamento do Docker-Compose do Wordpress estamos mapeando o diretório php que contém um arquivo php.ini com todas as nossas customizações que o container Docker deve considerar. Lá neste arquivo php.ini devemos adicionar o disable_functions mencionado acima.

Está com problema em sua aplicação PHP e quer saber mais como resolver ? Entre em contato comigo através do Twitter no @jaccon.