htrace.sh

Series: projects January 02, 2019

Podczas codziennej pracy zawsze brakowało mi narzędzia, dzięki któremu mógłbym w prosty i szybki sposób przetestować konfigurację domen. Umiejętność użycia takich narzędzi jak curl czy openssl jest według mnie bardzo ważna jednak jak to zwykle z konsolowymi narzędziami bywa - dostarczają one mnóstwo opcji, które ciężko zapamiętać.

Spis treści

Wprowadzenie

htrace.sh jest narzędziem powłoki wspomagającym profilowanie i debug’owanie aplikacji działających na protokołach http/https. Jest to także prosty wrapper obsługujący narzędzia zewnętrzne takie jak: testssl.sh, ssllabs, mozilla-observatory czy skrypty skanera nmap.

htrace.sh_preview.png

Jego głównym założeniem projektowym było przechwycenie wszystkich błędów związanych z przekierowaniami. Niby nic szczególnego jednak przy jakichkolwiek wdrożeniach czy choćby zmianach takich jak ustawienie list kontroli dostępu (IP ACL) weryfikacja była niekiedy kłopotliwa.

Potrzebowałem także przejrzysty obraz tego co się dzieje z danym request’em oraz to w jaki sposób jest on interpretowany przez serwery www - jest to także przydatne do sporządzenia prostego raportu.

Funkcje

Po pewnym czasie stwierdziłem, że warto byłoby dodać kilka innych ciekawych oraz ważnych funkcji dotyczących:

  • sprawdzania poprawności konfiguracji domeny (niezależnie czy stosujemy standalone-web-server czy reverse proxy)
  • sprawdzania podstawowych oraz rozszerzonych informacji na temat protokołów http oraz https:
    • statusy zwracanych odpowiedzi
    • informacje o wykorzystamym protokole
    • geolokalizację
  • analizy czasu odpowiedzi dla każdego wysłanego zapytania
  • sprawdzania poprawności przekierowań
  • przeglądania i weryfikowania zapytań oraz odpowiedzi
  • omijania pamięci podręcznej
  • możliwości ustawienia metody dla danego request’u
  • możliwości dodania własnych nagłówków
  • badania poprawności konfiguracji protokołu SSL/TLS czy chroniących domenę certyfikatów
  • wykorzystania zewnętrznych narzędzi takich jak:
    • mozilla-observatory - wersja konsolowa serwisu Mozilla Observatory
    • sslabs-scan - wersja konsolowa serwisu Ssllabs
    • mixed-content-scan - pozwala na sprawdzenie czy dane ładowane są przez bezpieczny protokół https
    • testssl.sh - szwajcarski scyzoryk jeżeli chodzi o debug’owanie SSL/TLS
    • nmap nse - zestaw skryptów związanych z http, https, ssl czy dns

Przykłady

Weryfikowanie przekierowań

Jeżeli chcemy sprawdzić przekierowania, np. czy domena www.example.com kieruje na example.com:

htrace.sh -d https://www.blkcipher.info --hide-src-ip

     htrace.sh v1.1.0  (openssl 1.1.0g: ok)


    URI: https://www.blkcipher.info

    req  time_total   time_connect    local_socket           via              remote_socket         geo   proto   ver   code     next_hop
    ---  ----------   ------------    ------------           ---              -------------         ---   -----   ---   ----     --------
 •   1   0.022068     0.022068        xxx.xxx.xxx.xxx:59018  xxx.xxx.xxx.xxx  35.228.233.78:443     US    https   1.1   301      https://blkcipher.info/
 •   2   0.042569     0.020501        xxx.xxx.xxx.xxx:59028  xxx.xxx.xxx.xxx  35.228.233.78:443     US    https   1.1   200

Podobnie jeśli zależy Nam na sprawdzeniu przekierowań między protokołami tj. z http na https.

Podgląd nagłówków odpowiedzi

Kolejną z opcji jest podgląd nagłówków serwowanych w odpowiedzi:

htrace.sh -d https://blkcipher.info --headers --hide-src-ip

     htrace.sh v1.1.0  (openssl 1.1.0g: ok)


    URI: https://blkcipher.info

    req  time_total   time_connect    local_socket           via              remote_socket         geo   proto   ver   code     next_hop
    ---  ----------   ------------    ------------           ---              -------------         ---   -----   ---   ----     --------
 •   1   0.021284     0.021284        xxx.xxx.xxx.xxx:59180  xxx.xxx.xxx.xxx  35.228.233.78:443     US    https   1.1   200

         › HTTP/1.1 200 OK
         › Date: Sun, 13 Jan 2019 08:51:30 GMT
         › Content-Type: text/html; charset=utf-8
         › Content-Length: 3483
         › Connection: keep-alive
         › Last-Modified: Sun, 13 Jan 2019 08:19:48 GMT
         › X-Cacheable: YES:No-Session
         › Cache-Control: max-age=180
         › Age: 6
         › Accept-Ranges: bytes
         › Server: Unknown
         › Content-Security-Policy: default-src 'none'; script-src 'none'; img-src 'self'; style-src 'self' https://fonts.googleapis.com https://maxcdn.bootstrapcdn.com; font-src 'self' https://fonts.gstatic.com https://maxcdn.bootstrapcdn.com; object-src 'none'; frame-ancestors 'self'; base-uri 'self'; form-action 'self';
         › Strict-Transport-Security: max-age=63072000; includeSubdomains
         › Referrer-Policy: no-referrer
         › X-Frame-Options: SAMEORIGIN
         › X-XSS-Protection: 1; mode=block
         › X-Content-Type-Options: nosniff
         › Allow: GET, POST, HEAD

Podgląd konfiguracji SSL/TLS

Następnie możemy podejrzeć konfigurację SSL/TLS oraz wyświetlić podstawowe informacje na temat certyfikatów chroniących domenę:

htrace.sh -d https://blkcipher.info --ssl --hide-src-ip

     htrace.sh v1.1.0  (openssl 1.1.0g: ok)


    URI: https://blkcipher.info

    req  time_total   time_connect    local_socket           via              remote_socket         geo   proto   ver   code     next_hop
    ---  ----------   ------------    ------------           ---              -------------         ---   -----   ---   ----     --------
 •   1   0.021874     0.021874        xxx.xxx.xxx.xxx:59266  xxx.xxx.xxx.xxx  35.228.233.78:443     US    https   1.1   200
         ssl: on, version(TLSv1.2), cipher(ECDHE-RSA-AES256-GCM-SHA384)
         public-key(2048 bit), signature(sha256WithRSAEncryption)
         date: Jan 6 12:28:55 2019 GMT / Apr 6 12:28:55 2019 GMT
         issuer: Let's Encrypt (Let's Encrypt Authority X3)
         owner: <empty>
         cn: blkcipher.info
         san: www.blkcipher.info blkcipher.info
         sni: not match
         validity: match
         verification: ok

built with Jekyll and trimstray blog — read the fine print