sobota, 3 marca 2007

tips & tricks: port knocking

Podczas "co sobotnich" porządków wpadł mi do głowy pomysł jak za pomocą address-list zaimplementować w MikroTik RouterOS metodę zabezpieczającą uruchomione na nim usługi zwaną port knocking'iem.

"Port-knocking" jest metodą pozwalającą na nawiązanie zdalnego połączenia z usługami działającymi na komputerze, do którego dostęp został ograniczony np. za pomocą filtra pakietów, umożliwiającą odróżniania prób połączeń, które powinny i nie powinny być zrealizowane.

Można uznać, że z punktu widzenia chcącego się połączyć klienta, na komputerze tym nie ma otwartych portów. System, z którego ma nastąpić połączenie, wysyła serię pakietów na zamknięte porty maszyny docelowej. Pakiety te są oczywiście ignorowane, ale odpowiednie oprogramowanie śledzi przychodzące pakiety i jeśli pakiety z danego adresu IP układają się w zdefiniowaną dla pewnej usługi sekwencję, wówczas system zezwala na połączenia z nią z tego adresu IP.

źródło: pl.wikipedia.org

Wyobraźmy sobie scenariusz w którym powinniśmy uzyskać dostęp do SSH działającego na danej maszynie pod warunkiem wysłania do niej wcześniej określonej sekwencji pakietów, na przykład: 100/tcp, 50/udp, 72/udp.

ip firewall filter [ent]
add chain=input protocol=tcp dst-port=100 action=add-src-to-address-list address-list=stage-1 address-list-timeout=5 [ent]
add chain=input protocol=udp dst-port=50 src-address-list=stage-1 action=add-src-to-address-list address-list=stage-2 address-list-timeout=5 [ent]
add chain=input protocol=udp dst-port=72 src-address-list=stage-2 action=add-src-to-address-list address-list=stage-3 address-list-timeout=5 [ent]
add chain=input protocol=tcp dst-port=22 src-address-list=stage-3 action=accept [ent]

Powyższa konfiguracja zakłada że kolejne pakiety z sekwencji będą pojawiać się nie później niż w 5 sekundowych odstępach.