Post

Jak obejít firewall pomocí DarkFlare

Krátký úvod pro rozšíření schopností v podobě tunelování, maskování provozu a obcházení cenzury.

Jak obejít firewall pomocí DarkFlare

Jak obejít firewall pomocí DarkFlare

Pokud hledáte řešení jak obejít firewall, který blokuje veškerý provoz mimo porty 80,443 nebo dokonce provádí inspekci provozu na aplikační vrstvě a rozpozná, že se nejedná o HTTP/S, nebo v případě že dokonce provádí i Deep-Packet-Inspection, tak jste tady správně. Jste tady správně i v případě, že se snažíte zakrýt zkrátka provoz, aby vám SOC oddělení nekoukalo pod ruce, a chcete být co nejvíce “stealthy”… Nebo jen zkrátka máte smůlu a pobýváte v nedemokratickém státě, kde je vše sledováno a blokováno, a jediné co vám zbývá je přístup na CDN. (V našem případě Cloudflare)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
                                FIREWALL/CENSORSHIP
                                |     |     |     |
                                v     v     v     v

[Client]──────┐                ┌──────────────────┐                ┌─────────[Target Service]
              │                │                  │                │       (e.g., SSH Server)
              │                │   CLOUDFLARE     │                │tcp      localhost:22
              │tcp             │     NETWORK      │                │
[darkflare    │                │                  │                │ [darkflare
 client]──────┼───HTTPS───────>│ (looks like      │─-HTTPS-───────>│  server]
localhost:2222│                │  normal traffic) │                │ :8080
or stdin/out  │                │                  │                │
              └────────────────┼──────────────────┼────────────────┘
                               │                  │
                               └──────────────────┘

Flow:
1. TCP traffic ──> darkflare-client
2. Wrapped as HTTPS ──> Cloudflare CDN (or any CDN)
3. Forwarded to ──> darkflare-server
4. Unwrapped back to TCP ──> Target Service

Výhody

  • Tento nástroj je efektivním způsobem jak obejít cenzuru, nebo firewall.
  • Jeho hlavní vlastností je přebalování TCP provozu do HTTPS provozu.
  • Generuje i náhodný provoz v případě využití Deep-Packet-Inspection, kdy se tváří, že vy jakožto uživatel prohlížíte web.
  • Lze aplikovat i v režimu stdin:stdout. Tzn. že máme další možnosti si hrát s roury tzn. “pipes”
  • Lze využít při ~/.ssh/config kdy využíváme ProxyCommand
  • Můžeme používat vlastní TLS certifikáty, nebo využít ty od Cloudflare.
  • Lze použít další proxy před připojením k CDN.

Co je potřeba

  • Doména
  • VPS nebo nějaký malý server (Rpi3 bohatě postačí)
  • Další VPS někde umístěný, (musí mít veřejnou IP) tzv. SSH endpoint
  • Cloudflare účet

1. Jak postupovat

  1. Potřebujeme pullnout tento repozitář: DarkFlare tzn. git clone https://github.com/doxx/darkflare, nebo si zkrátka stáhneme aktuální release.
  2. Pokud chceme, můžeme si binárky ve složce /bin “vybuildit” vlastní.
    1. Potřebujeme Go pokud nemáme, tak sudo snap install go --classic
    2. Jakmile máme, měli bychom být schopní pomocí make vytvořit nové binárky, pravděpodobně narazíte u x86_64-w64-mingw32-gcc, v tuto chvíli zbývá využít stávající binárky, nebo se s tím pohrát po vlastní ose.
  3. Budeme potřebovat účet na Cloudflare, jakmile máme, budeme potřebovat ještě VPS na které nám náš DarkFlare server poběží + další SSH endpoint který nám bude sloužit jako výstupní point. To jak si je rozmístit nechám na vás.

Schéma

Důležité je v tuto chvíli si uvědomit, že spojení od nás jako od uživatele půjde na naši doménu, která vrací IP adresu Cloudflare, který má cloudflared tunel na náš DarkFlare server, třeba právě Rpi. Čímž pádem se nám Cloudflare stará o to, že náš DarkFlare server je skryt a nepotřebujeme ani veřejnou IP adresu, následně naše spojení pokračuje z DarkFlare serveru na SSH endpoint na kterém můžeme mít třeba SOCKS proxy nebo pokračovat v SSH jumpech dál.

2. Cloudflare nastavení

  1. Navážeme spojení mezi DarkFlare serverem a Cloudflare tj. vytvoříme tunnel. ve zkratce v sekci:

ZeroTrust -> Networks -> Tunnels

  • tento tunel musí být funkční…
    1. Můžeme si ještě nastavit nad-rámec politiku, kdy nám Cloudflare slouží i jako Firewall.
    2. Jedná se o HTTP proxy HTTPS nám nad tím vytváří Cloudflare proxy. a port si nastavíme třeba 8080 viz. screenshot

Cloudflare tunel

Tady bych rád podotknul, že my vystavujeme DarkFlare server v rámci localhost, tedy spojení probíhá uvnitř systému, HTTP provoz po vnější síti není žádoucí !

3. DarkFlare server nastavení

  1. Spuštění serveru ./darkflare-server-linux-amd64 -o http://0.0.0.0:8080
  2. Pro ověření, funkčnosti serveru: Po přístupu na naši doménu by měl server přesměrovat na GitHub DarkFlare. Pokud ne, tak nám nefunguje správně server, nebo máme špatně cloudflared tunel.
    1
    2
    3
    4
    5
    6
    
    curl -I https://darkflare.revshell.cz
    HTTP/2 302
    date: XXX, XX Feb XXXX XX:XX:XX GMT
    content-type: text/html; charset=utf-8
    location: https://github.com/doxx/darkflare
    cf-cache-status: DYNAMIC
    

4. SSH endpoint

To jak správně zabezpečit SSH server není cílem tohoto návodu. Předpokládám, tedy funkční SSH server, na který je možno se připojit pomocí SSH. Ověření může být klíčem, což silně doporučuji.

5. Klient & Připojení

Finální fáze, kdy se již připojujeme na naši doménu, u které jsou DNS záznamy nastaveny na Cloudflare.

Linux:

1
./darkflare-client-linux-amd64 -l 2222 -t https://darkflare.revshell.cz -d x.x.x.x:22
  • -l 2222 nastavujeme lokální port
  • -t https://darkflare.revshell.cz nastavujeme naši doménu
  • -d x.x.x.x:22 nastavujeme SSH endpoint, port by měl být takový jaký jsme si u endpointu nastavili. Tzn. na kterém server poslouchá.

Tip: Zkontroluj si, že máš otevřený skutečně port 2222 pomocí ss -tulpn

Připojení k SSH endpointu

1
ssh user@localhost -p 2222 -i ~/.ssh/id_ecdsa

Pozor na localhost

  • user@localhost definujeme uživatele na SSH endpointu, dále volíme localhost protože dáváme vědět SSH, že se připojujeme na tunel v našem stroji.
  • -p 2222 definujeme lokální port, ten který se nám otevřel u nás na stroji.
  • -i ~/.ssh/id_ecdsa jak jsem zmínil měli bychom použít pro ověření klíč.

Shrnutí

  • V tuto chvíli bychom měli být připojení k SSH endpoint a co dál je jen na nás.
  • S tímto způsobem připojení se dá různě hrát, takže si z SSH endpoint uděláte SOCKS proxy a budete tak točit veškerý HTTP provoz přes tento tunel.
  • Jedná se o hodně obecné řešení, které lze mnoha způsoby modifikovat.
  • Sám jsem s tím strávil nějaký čas, kdy mi trvalo, než jsem si uvědomil co se kam a jak připojuje. Tento článek berte jako úvod do problematiky tunelování a třeba i rozšíření obzorů.
This post is licensed under CC BY 4.0 by the author.