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
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ámeProxyCommand
- 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
- Potřebujeme pullnout tento repozitář: DarkFlare tzn.
git clone https://github.com/doxx/darkflare
, nebo si zkrátka stáhneme aktuální release. - Pokud chceme, můžeme si binárky ve složce
/bin
“vybuildit” vlastní.- Potřebujeme
Go
pokud nemáme, taksudo snap install go --classic
- Jakmile máme, měli bychom být schopní pomocí
make
vytvořit nové binárky, pravděpodobně narazíte ux86_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.
- Potřebujeme
- 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.
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í
- 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í…
- Můžeme si ještě nastavit nad-rámec politiku, kdy nám Cloudflare slouží i jako Firewall.
- Jedná se o HTTP proxy HTTPS nám nad tím vytváří Cloudflare proxy. a port si nastavíme třeba
8080
viz. screenshot
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í
- Spuštění serveru
./darkflare-server-linux-amd64 -o http://0.0.0.0:8080
- 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ímelocalhost
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ů.