From fc6bae8fcd5c2c4eaf13f73505651ff53814d98d Mon Sep 17 00:00:00 2001 From: bol-van Date: Wed, 19 Jun 2024 19:46:16 +0300 Subject: [PATCH] winws: ssid-filter --- binaries/win64/winws.exe | Bin 175616 -> 177152 bytes binaries/win64/zapret-winws/winws.exe | Bin 175616 -> 177152 bytes docs/windows.eng.md | 3 + docs/windows.txt | 5 + nfq/Makefile | 2 +- nfq/crypto/aes-gcm.h | 2 +- nfq/crypto/aes.h | 4 +- nfq/crypto/gcm.c | 8 +- nfq/darkmagic.c | 92 +++++++++++++- nfq/darkmagic.h | 4 +- nfq/nfqws.c | 165 +++++++++++++++++--------- nfq/params.h | 4 +- nfq/protocol.c | 2 +- 13 files changed, 223 insertions(+), 68 deletions(-) diff --git a/binaries/win64/winws.exe b/binaries/win64/winws.exe index 4f5aba54b7f78dcaf3f98059f6d64c31bc832788..5c7cb514b688ef762cde5899ca1203e9b77afee9 100644 GIT binary patch delta 31913 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 U#cqn-YTk^Xkr8d#|`LmfIF&Ds=_TR1?A+1 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 ABLDyZ diff --git a/binaries/win64/zapret-winws/winws.exe b/binaries/win64/zapret-winws/winws.exe index 4f5aba54b7f78dcaf3f98059f6d64c31bc832788..5c7cb514b688ef762cde5899ca1203e9b77afee9 100644 GIT binary patch delta 31913 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 U#cqn-YTk^Xkr8d#|`LmfIF&Ds=_TR1?A+1 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 ABLDyZ diff --git a/docs/windows.eng.md b/docs/windows.eng.md index 77d2e92..e235001 100644 --- a/docs/windows.eng.md +++ b/docs/windows.eng.md @@ -49,6 +49,7 @@ Task of `iptables` is done inside `winws` through `windivert` filters. `Windiver --wf-udp=[~]port1[-port2] ; UDP port filter. ~ means negation. multiple comma separated values allowed. --wf-raw=|@ ; raw windivert filter string or filename --wf-save= ; save windivert filter string to a file and exit + --ssid-filter=ssid1[,ssid2,ssid3,...] ; enable winws only if any of specified wifi SSIDs connected ``` `--wf-l3`, `--wf-tcp`, `--wf-udp` can take multiple comma separated arguments. @@ -59,6 +60,8 @@ If you can't find index this way use `winws --debug` to see index there. Subinte Multiple `winws` processes are allowed. However, it's discouraged to intersect their filters. +`--ssid-filter` allows to enable `winws` only if specified wifi networks are connected. `winws` auto detects SSID appearance and disappearance. + `Cygwin` shell does not run binaries if their directory has it's own copy of `cygwin1.dll`. That's why exists separate standalone version in `binaries/win64/zapret-tpws`. `Cygwin` is required for `blockcheck.sh` support but `winws` itself can be run standalone without cygwin. diff --git a/docs/windows.txt b/docs/windows.txt index 54e964c..1e9e618 100644 --- a/docs/windows.txt +++ b/docs/windows.txt @@ -55,6 +55,7 @@ https://learn.microsoft.com/en-us/security-updates/SecurityAdvisories/2015/30339 --wf-udp=[~]port1[-port2] ; фильтр портов для udp. ~ означает отрицание --wf-raw=|@ ; задать напрямую фильтр windivert из параметра или из файла. имени файла предшествует символ @. --wf-save= ; сохранить сконструированный фильтр windivert в файл для последующей правки вручную + --ssid-filter=ssid1[,ssid2,ssid3,...] ; включать winws только когда подключена любая из указанных wifi сетей Параметры --wf-l3, --wf-tcp, --wf-udp могут брать несколько значений через запятую. @@ -70,6 +71,10 @@ autottl и autohostlist. При включении autohostlist так же пе Можно запускать несколько процессов winws с разными стратегиями. Однако, не следует делать пересекающиеся фильтры. +В --ssid-filter можно через запятую задать неограниченное количество имен wifi сетей (SSID). Если задана хотя бы одна сеть, +то winws включается только, если подключен указанный SSID. Если SSID исчезает, winws отключается. Если SSID появляется снова, +winws включается. Это нужно, чтобы можно было применять раздельное дурение к каждой отдельной wifi сети. + Если в путях присутствуют национальные символы, то при вызове winws из cmd или bat кодировку нужно использовать OEM. Для русского языка это 866. Пути с пробелами нужно брать в кавычки. diff --git a/nfq/Makefile b/nfq/Makefile index a2399f1..b334934 100644 --- a/nfq/Makefile +++ b/nfq/Makefile @@ -5,7 +5,7 @@ CFLAGS_MAC = -mmacosx-version-min=10.8 CFLAGS_CYGWIN = -Wno-address-of-packed-member -static LIBS_LINUX = -lnetfilter_queue -lnfnetlink -lz LIBS_BSD = -lz -LIBS_CYGWIN = -lz -Lwindivert -lwindivert +LIBS_CYGWIN = -lz -Lwindivert -lwindivert -lwlanapi SRC_FILES = *.c crypto/*.c all: nfqws diff --git a/nfq/crypto/aes-gcm.h b/nfq/crypto/aes-gcm.h index 1741930..d836001 100644 --- a/nfq/crypto/aes-gcm.h +++ b/nfq/crypto/aes-gcm.h @@ -2,5 +2,5 @@ #include "gcm.h" -// mode : ENCRYPT, DECRYPT +// mode : AES_ENCRYPT, AES_DECRYPT int aes_gcm_crypt(int mode, uint8_t *output, const uint8_t *input, size_t input_length, const uint8_t *key, const size_t key_len, const uint8_t *iv, const size_t iv_len, const uint8_t *adata, size_t adata_len, uint8_t *atag, size_t atag_len); diff --git a/nfq/crypto/aes.h b/nfq/crypto/aes.h index a8f94d1..b04724d 100644 --- a/nfq/crypto/aes.h +++ b/nfq/crypto/aes.h @@ -28,8 +28,8 @@ #include -#define ENCRYPT 1 // specify whether we're encrypting -#define DECRYPT 0 // or decrypting +#define AES_ENCRYPT 1 // specify whether we're encrypting +#define AES_DECRYPT 0 // or decrypting #if defined(_MSC_VER) #include diff --git a/nfq/crypto/gcm.c b/nfq/crypto/gcm.c index ed3d631..92a6e8f 100644 --- a/nfq/crypto/gcm.c +++ b/nfq/crypto/gcm.c @@ -186,7 +186,7 @@ int gcm_setkey(gcm_context *ctx, // pointer to caller-provided gcm context // encrypt the null 128-bit block to generate a key-based value // which is then used to initialize our GHASH lookup tables - if ((ret = aes_setkey(&ctx->aes_ctx, ENCRYPT, key, keysize)) != 0) + if ((ret = aes_setkey(&ctx->aes_ctx, AES_ENCRYPT, key, keysize)) != 0) return(ret); if ((ret = aes_cipher(&ctx->aes_ctx, h, h)) != 0) return(ret); @@ -266,7 +266,7 @@ int gcm_start(gcm_context *ctx, // pointer to user-provided GCM context ctx->add_len = 0; ctx->mode = mode; // set the GCM encryption/decryption mode - ctx->aes_ctx.mode = ENCRYPT; // GCM *always* runs AES in ENCRYPTION mode + ctx->aes_ctx.mode = AES_ENCRYPT; // GCM *always* runs AES in ENCRYPTION mode if (iv_len == 12) { // GCM natively uses a 12-byte, 96-bit IV memcpy(ctx->y, iv, iv_len); // copy the IV to the top of the 'y' buff @@ -338,7 +338,7 @@ int gcm_update(gcm_context *ctx, // pointer to user-provided GCM context return(ret); // encrypt or decrypt the input to the output - if (ctx->mode == ENCRYPT) + if (ctx->mode == AES_ENCRYPT) { for (i = 0; i < use_len; i++) { // XOR the cipher's ouptut vector (ectr) with our input @@ -481,7 +481,7 @@ int gcm_auth_decrypt( (which is an identical XORing to reverse the previous one) and also to re-generate the matching authentication tag */ - gcm_crypt_and_tag(ctx, DECRYPT, iv, iv_len, add, add_len, + gcm_crypt_and_tag(ctx, AES_DECRYPT, iv, iv_len, add, add_len, input, output, length, check_tag, tag_len); // now we verify the authentication tag in 'constant time' diff --git a/nfq/darkmagic.c b/nfq/darkmagic.c index e1a6e17..6873197 100644 --- a/nfq/darkmagic.c +++ b/nfq/darkmagic.c @@ -14,6 +14,9 @@ #include "params.h" #include "nfqws.h" +#ifdef __CYGWIN__ +#include +#endif uint32_t net32_add(uint32_t netorder_value, uint32_t cpuorder_increment) { @@ -959,8 +962,83 @@ void tcp_rewrite_winsize(struct tcphdr *tcp, uint16_t winsize, uint8_t scale_fac static HANDLE w_filter = NULL; static OVERLAPPED ovl = { .hEvent = NULL }; +static const struct str_list_head *wlan_filter_ssid = NULL; +static DWORD wlan_filter_tick=0; uint32_t w_win32_error=0; +bool wlan_filter_match(const struct str_list_head *ssid_list) +{ + DWORD dwCurVersion; + HANDLE hClient = NULL; + PWLAN_INTERFACE_INFO_LIST pIfList = NULL; + PWLAN_INTERFACE_INFO pIfInfo; + PWLAN_CONNECTION_ATTRIBUTES pConnectInfo; + DWORD connectInfoSize, k; + bool bRes; + struct str_list *ssid; + size_t len; + + // no filter given. always matches. + if (!ssid_list || LIST_EMPTY(ssid_list)) + { + w_win32_error = 0; + return true; + } + + w_win32_error = WlanOpenHandle(2, NULL, &dwCurVersion, &hClient); + if (w_win32_error != ERROR_SUCCESS) goto fail; + w_win32_error = WlanEnumInterfaces(hClient, NULL, &pIfList); + if (w_win32_error != ERROR_SUCCESS) goto fail; + for (k = 0; k < pIfList->dwNumberOfItems; k++) + { + pIfInfo = pIfList->InterfaceInfo + k; + if (pIfInfo->isState == wlan_interface_state_connected) + { + w_win32_error = WlanQueryInterface(hClient, + &pIfInfo->InterfaceGuid, + wlan_intf_opcode_current_connection, + NULL, + &connectInfoSize, + (PVOID *)&pConnectInfo, + NULL); + if (w_win32_error != ERROR_SUCCESS) goto fail; + +// printf("%s\n", pConnectInfo->wlanAssociationAttributes.dot11Ssid.ucSSID); + + LIST_FOREACH(ssid, ssid_list, next) + { + len = strlen(ssid->str); + if (len==pConnectInfo->wlanAssociationAttributes.dot11Ssid.uSSIDLength && !memcmp(ssid->str,pConnectInfo->wlanAssociationAttributes.dot11Ssid.ucSSID,len)) + { + WlanFreeMemory(pConnectInfo); + goto found; + } + } + + WlanFreeMemory(pConnectInfo); + } + } + w_win32_error = 0; +fail: + bRes = false; +ex: + if (pIfList) WlanFreeMemory(pIfList); + if (hClient) WlanCloseHandle(hClient, 0); + return bRes; +found: + w_win32_error = 0; + bRes = true; + goto ex; +} + +static bool wlan_filter_match_rate_limited(void) +{ + DWORD dwTick = GetTickCount() / 1000; + if (wlan_filter_tick == dwTick) return true; + wlan_filter_tick = dwTick; + return wlan_filter_match(wlan_filter_ssid); +} + static HANDLE windivert_init_filter(const char *filter, UINT64 flags) { LPSTR errormessage = NULL; @@ -1006,8 +1084,9 @@ void rawsend_cleanup(void) CloseHandle(ovl.hEvent); ovl.hEvent=NULL; } + wlan_filter_ssid = NULL; } -bool windivert_init(const char *filter) +bool windivert_init(const char *filter, const struct str_list_head *ssid_filter) { rawsend_cleanup(); w_filter = windivert_init_filter(filter, 0); @@ -1020,6 +1099,7 @@ bool windivert_init(const char *filter) rawsend_cleanup(); return false; } + wlan_filter_ssid = ssid_filter; return true; } return false; @@ -1037,6 +1117,11 @@ static bool windivert_recv_filter(HANDLE hFilter, uint8_t *packet, size_t *len, errno=EINTR; return false; } + if (!wlan_filter_match_rate_limited()) + { + errno=ENODEV; + return false; + } usleep(0); if (WinDivertRecvEx(hFilter, packet, *len, &recv_len, 0, wa, NULL, &ovl)) { @@ -1057,6 +1142,11 @@ static bool windivert_recv_filter(HANDLE hFilter, uint8_t *packet, size_t *len, errno=EINTR; return false; } + if (!wlan_filter_match_rate_limited()) + { + errno=ENODEV; + return false; + } usleep(0); } if (!GetOverlappedResult(hFilter,&ovl,&rd,TRUE)) diff --git a/nfq/darkmagic.h b/nfq/darkmagic.h index 8108185..eb7ef97 100644 --- a/nfq/darkmagic.h +++ b/nfq/darkmagic.h @@ -18,6 +18,7 @@ #endif #include "packet_queue.h" +#include "pools.h" #ifndef IPPROTO_DIVERT #define IPPROTO_DIVERT 258 @@ -151,9 +152,10 @@ bool tcp_has_fastopen(const struct tcphdr *tcp); #ifdef __CYGWIN__ extern uint32_t w_win32_error; -bool windivert_init(const char *filter); +bool windivert_init(const char *filter, const struct str_list_head *ssid_filter); bool windivert_recv(uint8_t *packet, size_t *len, WINDIVERT_ADDRESS *wa); bool windivert_send(const uint8_t *packet, size_t len, const WINDIVERT_ADDRESS *wa); +bool wlan_filter_match(const struct str_list_head *ssid_list); #else // should pre-do it if dropping privileges. otherwise its not necessary bool rawsend_preinit(bool bind_fix4, bool bind_fix6); diff --git a/nfq/nfqws.c b/nfq/nfqws.c index 89ba98e..fd8ab9a 100644 --- a/nfq/nfqws.c +++ b/nfq/nfqws.c @@ -410,72 +410,99 @@ static int win_main(const char *windivert_filter) WINDIVERT_ADDRESS wa; char ifout[22]; - if (!windivert_init(windivert_filter)) - return w_win32_error; - - printf("windivert initialized. capture is started.\n"); - pre_desync(); - // cygwin auto flush fails when piping - fflush(stdout); - fflush(stderr); - - for (id=0;;id++) + for(;;) { - len = sizeof(packet); - if (!windivert_recv(packet, &len, &wa)) + if (!wlan_filter_match(¶ms.ssid_filter)) { - if (errno==ENOBUFS) + printf("logical network is not present. waiting it to appear.\n"); + fflush(stdout); + do { - DLOG("windivert: ignoring too large packet\n") - continue; // too large packet + if (bQuit) + { + DLOG("QUIT requested\n") + return 0; + } + usleep(500000); } - else if (errno==EINTR) - { - DLOG("QUIT requested\n") - break; - } - fprintf(stderr, "windivert: recv failed. errno %d\n", errno); + while (!wlan_filter_match(¶ms.ssid_filter)); + printf("logical network now present\n"); + fflush(stdout); + } + + if (!windivert_init(windivert_filter, ¶ms.ssid_filter)) return w_win32_error; - } - *ifout=0; - if (wa.Outbound) snprintf(ifout,sizeof(ifout),"%u.%u", wa.Network.IfIdx, wa.Network.SubIfIdx); - DLOG("packet: id=%u len=%zu %s IPv6=%u IPChecksum=%u TCPChecksum=%u UDPChecksum=%u IfIdx=%u.%u\n", id, len, wa.Outbound ? "outbound" : "inbound", wa.IPv6, wa.IPChecksum, wa.TCPChecksum, wa.UDPChecksum, wa.Network.IfIdx, wa.Network.SubIfIdx) - if (wa.Impostor) - { - DLOG("windivert: passing impostor packet\n") - verdict = VERDICT_PASS; - } - else if (wa.Loopback) - { - DLOG("windivert: passing loopback packet\n") - verdict = VERDICT_PASS; - } - else - { - mark=0; - // pseudo interface id IfIdx.SubIfIdx - verdict = processPacketData(&mark, ifout, packet, &len); - } - switch (verdict & VERDICT_MASK) - { - case VERDICT_PASS: - case VERDICT_MODIFY: - if ((verdict & VERDICT_MASK)==VERDICT_PASS) - DLOG("packet: id=%u reinject unmodified\n", id) - else - DLOG("packet: id=%u reinject modified len=%zu\n", id, len) - if (!windivert_send(packet, len, &wa)) - fprintf(stderr,"windivert: reinject of packet id=%u failed\n", id); - break; - default: - DLOG("packet: id=%u drop\n", id); - } + + printf("windivert initialized. capture is started.\n"); // cygwin auto flush fails when piping fflush(stdout); fflush(stderr); + + for (id=0;;id++) + { + len = sizeof(packet); + if (!windivert_recv(packet, &len, &wa)) + { + if (errno==ENOBUFS) + { + DLOG("windivert: ignoring too large packet\n") + continue; // too large packet + } + else if (errno==ENODEV) + { + printf("logical network disappeared. deinitializing windivert.\n"); + rawsend_cleanup(); + break; + } + else if (errno==EINTR) + { + DLOG("QUIT requested\n") + return 0; + } + fprintf(stderr, "windivert: recv failed. errno %d\n", errno); + return w_win32_error; + } + *ifout=0; + if (wa.Outbound) snprintf(ifout,sizeof(ifout),"%u.%u", wa.Network.IfIdx, wa.Network.SubIfIdx); + DLOG("packet: id=%u len=%zu %s IPv6=%u IPChecksum=%u TCPChecksum=%u UDPChecksum=%u IfIdx=%u.%u\n", id, len, wa.Outbound ? "outbound" : "inbound", wa.IPv6, wa.IPChecksum, wa.TCPChecksum, wa.UDPChecksum, wa.Network.IfIdx, wa.Network.SubIfIdx) + if (wa.Impostor) + { + DLOG("windivert: passing impostor packet\n") + verdict = VERDICT_PASS; + } + else if (wa.Loopback) + { + DLOG("windivert: passing loopback packet\n") + verdict = VERDICT_PASS; + } + else + { + mark=0; + // pseudo interface id IfIdx.SubIfIdx + verdict = processPacketData(&mark, ifout, packet, &len); + } + switch (verdict & VERDICT_MASK) + { + case VERDICT_PASS: + case VERDICT_MODIFY: + if ((verdict & VERDICT_MASK)==VERDICT_PASS) + DLOG("packet: id=%u reinject unmodified\n", id) + else + DLOG("packet: id=%u reinject modified len=%zu\n", id, len) + if (!windivert_send(packet, len, &wa)) + fprintf(stderr,"windivert: reinject of packet id=%u failed\n", id); + break; + default: + DLOG("packet: id=%u drop\n", id); + } + + // cygwin auto flush fails when piping + fflush(stdout); + fflush(stderr); + } } return 0; } @@ -521,6 +548,9 @@ static void cleanup_params(void) StrPoolDestroy(¶ms.hostlist_exclude); StrPoolDestroy(¶ms.hostlist); HostFailPoolDestroy(¶ms.hostlist_auto_fail_counters); +#ifdef __CYGWIN__ + strlist_destroy(¶ms.ssid_filter); +#endif } static void exit_clean(int code) { @@ -760,6 +790,8 @@ static void exithelp(void) " --wf-udp=[~]port1[-port2]\t\t\t; UDP port filter. ~ means negation. multiple comma separated values allowed.\n" " --wf-raw=|@\t\t\t; raw windivert filter string or filename\n" " --wf-save=\t\t\t\t; save windivert filter string to a file and exit\n" + "\nLOGICAL NETWORK FILTER:\n" + " --ssid-filter=ssid1[,ssid2,ssid3,...]\t\t; enable winws only if any of specified wifi SSIDs connected\n" #endif "\nHOSTLIST FILTER:\n" " --hostlist=\t\t\t\t; apply dpi desync only to the listed hosts (one host per line, subdomains auto apply, gzip supported, multiple hostlists allowed)\n" @@ -915,7 +947,9 @@ int main(int argc, char **argv) LIST_INIT(¶ms.hostlist_files); LIST_INIT(¶ms.hostlist_exclude_files); -#ifndef __CYGWIN__ +#ifdef __CYGWIN__ + LIST_INIT(¶ms.ssid_filter); +#else if (can_drop_root()) // are we root ? { params.uid = params.gid = 0x7FFFFFFF; // default uid:gid @@ -1002,6 +1036,7 @@ int main(int argc, char **argv) {"wf-udp",required_argument,0,0}, // optidx=53 {"wf-raw",required_argument,0,0}, // optidx=54 {"wf-save",required_argument,0,0}, // optidx=55 + {"ssid-filter",required_argument,0,0}, // optidx=56 #endif {NULL,0,NULL,0} }; @@ -1499,6 +1534,24 @@ int main(int argc, char **argv) strncpy(wf_save_file, optarg, sizeof(wf_save_file)); wf_save_file[sizeof(wf_save_file) - 1] = '\0'; break; + case 56: /* ssid-filter */ + { + char *e,*p = optarg; + while (p) + { + e = strchr(p,','); + if (e) *e++=0; + if (*p && !strlist_add(¶ms.ssid_filter, p)) + { + fprintf(stderr, "strlist_add failed\n"); + exit_clean(1); + } + p = e; + + } + } + break; + #endif } } diff --git a/nfq/params.h b/nfq/params.h index b0e5f4a..9098c34 100644 --- a/nfq/params.h +++ b/nfq/params.h @@ -65,7 +65,9 @@ struct params_s size_t fake_http_size,fake_tls_size,fake_quic_size,fake_wg_size,fake_dht_size,fake_unknown_size,fake_syndata_size,fake_unknown_udp_size; int udplen_increment; -#ifndef __CYGWIN__ +#ifdef __CYGWIN__ + struct str_list_head ssid_filter; +#else bool droproot; uid_t uid; gid_t gid; diff --git a/nfq/protocol.c b/nfq/protocol.c index df23dcb..c718c35 100644 --- a/nfq/protocol.c +++ b/nfq/protocol.c @@ -600,7 +600,7 @@ bool QUICDecryptInitial(const uint8_t *data, size_t data_len, uint8_t *clean, si header[0] = packet0; for(uint8_t i = 0; i < pkn_len; i++) header[header_len - 1 - i] = (uint8_t)(pkn >> (8 * i)); - if (aes_gcm_crypt(DECRYPT, clean, decrypt_begin, cryptlen, aeskey, sizeof(aeskey), aesiv, sizeof(aesiv), header, header_len, atag, sizeof(atag))) + if (aes_gcm_crypt(AES_DECRYPT, clean, decrypt_begin, cryptlen, aeskey, sizeof(aeskey), aesiv, sizeof(aesiv), header, header_len, atag, sizeof(atag))) return false; // check if message was decrypted correctly : good keys , no data corruption