OWASP O ZAP não pode estabelecer conexão TLS de proxy para alguns sites

0

Problema:

Não consigo interceptar o tráfego HTTPS de alguns sites usando o OWASP ZAP.

Tenho permissão dos operadores dos sites em questão para "raspar" esses sites para fazer o download dos dados do & ordenando & portais sharepoint.

Para fins de desenvolvimento / depuração, usei anteriormente o OWASP ZAP como um proxy de depuração, mas suspeito que as atualizações de TLS nesses sites estejam me impedindo de fazer isso agora.

URL de exemplo:

Um exemplo de URL HTTPS que anteriormente eu era capaz de carregar via ZAP, mas não pode mais carregar, é o Portal do cliente NBN Co .

(Isto não é para o público em geral, mas você não precisa se logar para reproduzir o problema, então eu me sinto bem dando isso aqui.)

Para ser claro, meu código de raspagem ainda pode se conectar aos sites, mas um navegador (como o Firefox) via OWASP ZAP não pode fazê-lo.

Mensagem de erro:

ZAP Error [javax.net.ssl.SSLException]: Received fatal alert: close_notify

Stack Trace:
javax.net.ssl.SSLException: Received fatal alert: close_notify
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2011)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1113)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375)
    at org.parosproxy.paros.network.SSLConnector.createSocket(Unknown Source)
    at org.apache.commons.httpclient.HttpConnection.open(Unknown Source)
    at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Unknown Source)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(Unknown Source)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at org.parosproxy.paros.network.HttpSender.executeMethod(Unknown Source)
    at org.parosproxy.paros.network.HttpSender.runMethod(Unknown Source)
    at org.parosproxy.paros.network.HttpSender.send(Unknown Source)
    at org.parosproxy.paros.network.HttpSender.sendAuthenticated(Unknown Source)
    at org.parosproxy.paros.network.HttpSender.sendAndReceive(Unknown Source)
    at org.parosproxy.paros.network.HttpSender.sendAndReceive(Unknown Source)
    at org.parosproxy.paros.core.proxy.ProxyThread.processHttp(Unknown Source)
    at org.parosproxy.paros.core.proxy.ProxyThread.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)

O erro do site de exemplo que eu dei acima é mencionado em alguns lugares na web e se manifesta como uma resposta 502 Bad Gateway do site, mas é retornado como uma resposta 200 Ok text / plain do ZAP para o navegador. No entanto, a própria mensagem menciona o ZAP, então obviamente não é o site que gera o 502.

Ao pesquisar o erro, a maioria dos artigos sugere ajustes nos protocolos Java ou ZAP TLS & cifras e / ou atualização de Java ou OWAZP ZAP.

Em alguns outros sites, eu consegui ajustar as configurações TLS de proxy para fazer proxy de algumas configurações de site TLS mais modernas (por exemplo: no ZAP: desativar os protocolos mais antigos via Tools > Option > Local proxy )

Não tive sorte com o meu exemplo acima.

Etapas para reproduzir:

  1. Crie e lance novo perfil de Firefox vazio

firefox --no-remote -ProfileManager

Crie um novo perfil em branco chamado "proxy", selecione novamente seu perfil padrão (para a próxima inicialização) e saia.

firefox --no-remote -P proxy &

  1. Instale a versão mais recente do OWASP ZAP com o Java 8

Vou usar o Docker para ajudar na reprodução do problema.

Dockerfile:

FROM java:8

ENV ZAP_VERSION 2.5.0
RUN apt-get update && apt-get clean
RUN apt-get install -q -y wget && apt-get clean
RUN mkdir /zap
RUN cd /zap && wget https://github.com/zaproxy/zaproxy/releases/download/${ZAP_VERSION}/ZAP_${ZAP_VERSION}_Linux.tar.gz
RUN cd /zap && tar zxvf ZAP_${ZAP_VERSION}_Linux.tar.gz
RUN apt-get install -q -y sudo xauth libxrender1 libxtst6 libxi6 net-tools less && apt-get clean

RUN export uid=1000 gid=1000 && \
    mkdir -p /home/developer && \
    echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
    echo "developer:x:${uid}:" >> /etc/group && \
    echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && \
    chmod 0440 /etc/sudoers.d/developer && \
    chown ${uid}:${gid} -R /home/developer && \
    chown -R 1000 /home/developer/ && \
    chmod -R u+rw /home/developer/

USER developer
ENV JAVA_HOME /opt/java
ENV PATH $JAVA_HOME/bin:/zap/ZAP_${ZAP_VERSION}/:$PATH
ENV HOME /home/developer

EXPOSE 8080
CMD /zap/ZAP_${ZAP_VERSION}/zap.sh -host 0.0.0.0 -port 8080 -newsession 'date --iso-8601=s'

Construir como:

docker build -t zaproxy:2.5.0 .

Executar como:

mkdir -p $HOME/.ZAP
docker run \
  --rm \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v $HOME/.ZAP:/home/developer/.ZAP \
  -p 8080:8080 \
zaproxy:2.5.0 &
  1. Gere e salve a CA raiz do OWASP

No zaproxy, Tools > Options > Dynamic SSL Certificates

Generate (se ainda não estiver presente), copie para o arquivo de texto acessível ao firefox.

  1. Instale a CA raiz do OWASP salva no firefox

Preferences > Advanced > Cerfificates > View Certificates > Authorities

Import > Escolha seu certificado salvo > Open

  1. Proxy de todos os protocolos de rede do firefox via OWASP ZAP

Preferences > Advanced > Network > Settings > Manual proxy configuration

Configure como:

  • HTTP Proxy : 127.0.0.1
  • Port : 8080
  • Marque Use this proxy server for all protocols

Em seguida, clique em Ok

  1. Visite https://google.com para testar se o proxy está funcionando

Você deve ver as solicitações HTTPS interceptadas no painel inferior do OWASP ZAP.

  1. Visite o quebrado URL para demonstrar o erro .
por David-SkyMesh 30.10.2016 / 09:49

1 resposta

0

Por lista de discussão zaproxy-users:

  • o servidor da web remoto não está aceitando a conexão TLS
  • alterar as configurações de "proxy local" não ajuda, mas as configurações de "conexão" podem

Desativei o TLS 1.1 e 1.2 na guia de opções "Conexões" (saída) e consegui fazer proxy nesse domínio.

    
por 02.11.2016 / 15:16