Исследования мои этих моментов начались еще с момента выхода OS X Lion 10.7 и я изначально использовал для защиты стороннее программное обеспечение, платное и весьма эффективное, пока не разобрался что к чему и посредством чего это программное обеспечение покрывает такой результат.
Собственно, вот простой скрипт, который глушит управление firewall через внутренние сервисы системы MacOS на базе якорей и отдает управление напрямую пакетному фильтру, который блокирует вообще все входящие подключения:
# # Ninja PF configuration file( original located on /etc/pf.conf.backup ). # # This file contains the main ruleset, which gets automatically loaded # at startup. PF will not be automatically enabled, however. Instead, # each component which utilizes PF is responsible for enabling and disabling # PF via -E and -X as documented in pfctl(8). That will ensure that PF # is disabled only when the last enable reference is released. # # Care must be taken to ensure that the main ruleset does not get flushed, # as the nested anchors rely on the anchor point defined here. In addition, # to the anchors loaded by this file, some system services would dynamically # insert anchors into the main ruleset. These anchors will be added only when # the system service is used and would removed on termination of the service. # # See pf.conf(5) for syntax. # # ICMP configure icmp_types = "{echoreq, echorep, unreach}" icmp6_types = "{echoreq, unreach, echorep, 133, 134, 135, 136, 137}" netbios_types = "{137,138,139}" interfaces = "{en0, en1, en2, en3, en4}" # Base policy set fingerprints "/etc/pf.os" set block-policy drop set state-policy if-bound set require-order yes set optimization aggressive set ruleset-optimization none set skip on lo0 scrub in all fragment reassemble no-df min-ttl 64 max-mss 1440 scrub out all random-id block in log all pass out quick flags S/SA modulate state # Antispoofing antispoof quick for $interfaces inet antispoof quick for $interfaces inet6 # More secure settings block in from urpf-failed to any block in quick on $interfaces from any to 255.255.255.255 block in quick on $interfaces from any to 255.255.255.0 # ICMP policy block in inet proto icmp all icmp-type $icmp_types keep state block in inet6 proto icmp6 all icmp6-type $icmp6_types keep state block in on $interfaces proto {tcp,udp} from any to any port $netbios_types
Не забудьте поставить галку включить firewall в preferences. Чтобы проверить, что PF запущен просто выполните в терминале
sudo pfctl -sa
Здесь кратко собранны паттерны правил управления соединениями и интерфейсами, а сама настройка максимально блокирует входящий трафик. Если у вас совсем паранойя — просто закоментируйте строчку set skip on lo0 и вы избавите систему от работоспособного web-сервера и заблокируете большинству приложений доступ к loop back интерфейсу(петля терминала).
Lo0 обычно полезно блокировать, если вы любите поиграть в пиратские игры с торрентов, которые нередко пропатчены эксполойом или еще какой-то дрянью.
Второе, что делает скрипт, это по согласию пользователя устанавливает повышенные настройки безопасности ядра.
Вот краткий листинг:
# 10.13.4 system ctl configuration # Kernel IPC overrides kern.ipc.somaxconn=100 # kernel security level(0, 1 - soft security level or 2 - can't install any software) kern.securelevel=1 # Speed up TM backups debug.lowpri_throttle_enabled=0 kern.coredump=0 # Networking settings net.link.ether.inet.max_age=600 net.inet.ip.redirect=0 net.inet6.ip6.redirect=0 net.inet.ip.sourceroute=0 net.inet.ip.accept_sourceroute=0 net.inet.ip.linklocal.in.allowbadttl=0 net.inet.icmp.bmcastecho=0 net.inet.icmp.icmplim=50 net.inet.icmp.maskrepl=0 net.inet.udp.blackhole=1 net.inet.tcp.blackhole=2 net.inet.tcp.delayed_ack=2 net.inet.tcp.always_keepalive=0 net.inet.tcp.rfc3390=1 net.inet.tcp.rfc1644=1 net.inet.tcp.tso=0 # Incoming and outgoing port ranges net.inet.tcp.sack_globalmaxholes=2000 net.inet.ip.portrange.first=1024 net.inet.ip.portrange.last=65535 net.inet.ip.portrange.hifirst=1024 net.inet.ip.portrange.hilast=2500 net.inet.ip.check_interface=1 net.inet.tcp.keepidle=50000 net.inet.ip.rtmaxcache=1024 net.inet.tcp.path_mtu_discovery=0 net.inet6.icmp6.rediraccept=0 net.inet.tcp.msl=4500 net.inet6.icmp6.nodeinfo=0 net.inet6.ip6.accept_rtadv=0 net.inet6.ip6.auto_linklocal=1 net.inet6.ip6.only_allow_rfc4193_prefixes=1 net.inet6.icmp6.nd6_onlink_ns_rfc4861=1
Данные параметры ядра ужесточают политику сетевых подключений включая все возможные RFC и блокируя все возможные шумы(эхо, редиректы и так далее), а отдельного внимания стоит параметр kern.securelevel=1, который может оказаться крайне полезным для pen тестера.
kern.securelevel=2 полностью заблокирует возможности установки в систему каких либо пакетов. Вообще наглухо. Но система при этом не потеряет работоспособности.
Я также перевернул порты приложений требующих высокие значения и приземлил их пониже, чтобы трафик было не комфортнее «слушать».
Далее скрипту добавлены опции кастомизации некоторых параметров отображения Finder и небольшие настройки для Safari. Например, стоит отключить AV Foundation и прочие медиа функции так, как одной сплойтерной картинкой с web сайта систему можно хакнуть через аудио и видео стримы.
И вообще, странно, но даже iTunes в MacOS следит, поэтому я предпочитаю полный танк.
Заплатка выложена на GitHub. Для запуска используйте
sudo ./fix.sh
Если у вас есть предложения и поправки — предлагаю поделиться своими соображениями в комментариях.
ссылка на оригинал статьи https://habr.com/post/421221/
Добавить комментарий