Статья Защищаемся на Mac OS

Всем салют.

Может показаться смешным и нелепым выполнение на Mac OS еще каких либо действий помимо жамканья по кнопке включить firewall и gatekeeper, однако я приведу до боли тупой пример, как установленный на GUI оболочку софт скачанный с интернета может получить доступ к loopback интерфейсу и делать там пока ты играешь в игру нечто невообразимое. А также расскажу про парочку настроек ядра, которые позволяют хардкорно пентестить не боясь сломать систему.

Начнем с небольшой теории. Для начала представим как в Mac OS работает защита от сетевых атак. Это GUI, которое перехватывает управление Packet Filter(таким же как в семействах BSD) и предоставляет возможность пользователю управлять всем через сервисы анкорами. Собсно, треся пуканом от паранойи и подозрений тупо лишим внешнее GUI и ее графический софт возможности распоряжаться подключениями. Нужно применить заплатку, которая установит в систему следующий базовый конфиг PF:

Bash:
#
# 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

Здесь пробиты все правила по умолчанию на основе которых вы сможете допилить свою настройку. Это самый болотный конфигурированиям файрвола, который вообще не будет отвечать drop'ом на все входящие, вырубит ICMP и поскрабит коннекта, чтобы нас не дрюкнули через ARP.

Можно сделать акцент на строке set skip on lo0. Если это убрать, то у приложений не будет доступа к терминалу вообще, так как lo0 это и есть loopback. Нужно это для тех кто ворует игры с торретнов к примеру(нечаянно спалил что пока играешь у тебя в терминале своя жизнь).


Далее ковырнем ядро:

Bash:
# 10.13.4 system ctl configuration
# Fix panic autorestart time

# 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

Все что тут сделано - это выставлены по максималке стандартны отношения к сети, а также некоторые настройки портов.
Можно в защите от банальной прослушки пересадить приоритетные приложения на такие порты, о которых е догадываются(например запустить их потоком вместе с торрентом и в подмешанном трафике нихрена не найдут).

kern.securelevel=1 -- если эту шнягу поставить 2, то в систему не установится ни одни пакет, но она не потеряет работоспособности.

Где-то на форуме видел раздел по форензике и, собсно, если тебя хакнули - этой настройкой можно медленно и аккуратно изучать симптомы, последствия, прочее. А можно просто тестить malware и так далее.

Далее небольшой скрипт установщик, который подправляет систему по вашему выбору и подрезает некоторые слежки:

Bash:
#!/bin/bash
#
# Small & hard fix for Mac OS X 10.13.x System ...
#

sudo clear;
pwd;

echo "NINJA: this script performs some system fixes for security";
echo "next steps allow you choose the way";

echo "";
# Advanced System fixes
echo "Display the file extensions in Finder.";
echo "Enable the expand save panel by default.";
echo "Make Crash Reporter appear as a notification.";

echo "All options: YES or NO"

echo "";
read Finder;
if [ "$Finder" == "YES" ]; then
 sudo defaults write NSGlobalDomain AppleShowAllExtensions -bool true;
 sudo defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true;
 sudo defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true;
 sudo defaults write com.apple.CrashReporter UseUNC 1;
fi

echo "";
echo "Show Library folder in Finder? YES \ NO";
read LIBFOLD;
if [ "$LIBFOLD" == "YES" ]; then
    chflags nohidden ~/Library;
fi

echo "";
# Packet filter
echo "Install hard full block policy with stealth? YES \ NO";
read PACKETFILTER;
if [ "$PACKETFILTER" == "YES" ]; then
 sudo mv /etc/pf.conf /etc/pf.conf.backup;
 sudo mv /etc/pf.os /etc/pf.os.backup;
 sudo cp -R pf.os /etc/pf.os;
 sudo cp -R pf.conf /etc/pf.conf;
 sudo chmod 644 /etc/pf.*;
 sudo chown 0:0 /etc/pf.*;
 sudo pfctl -d -f /etc/pf.conf -e;
 sudo pfctl -sa;
fi

echo "";
# Kernel config installer 10.12
echo "Setup sysctl config with more secure settings? YES \ NO";
read SYSCTL;
if [ "$SYSCTL" == "YES" ]; then
 sudo cp -R sysctl.conf /etc/sysctl.conf;
fi

echo "";
# Safari
echo "Enable safari debug menu? YES \ NO";
read SAFARI;
if [ "$SAFARI" == "YES" ]; then
 killAll Safari;
 sudo defaults write com.apple.Safari WebKitInitialTimedLayoutDelay 0.25;
 sudo defaults write com.apple.Safari IncludeInternalDebugMenu 1;

 echo "Optionally you can disable AV Foundation in Debug Menu Safari and QT Kit";
 echo "it improves security";
fi

echo "";
# Switch off ARDa and Screen Sharing
echo "Disable remote event controls and screen sharing? YES \ NO";
read ARDASharing;
if [ "$ARDASharing" == "YES" ]; then
 sudo mkdir /System/Library/CoreServices/RemoteManagement/DisabledControls
 sudo mv /System/Library/CoreServices/RemoteManagement/*.bundle /System/Library/CoreServices/RemoteManagement/DisabledControls/;
 sudo mv /System/Library/CoreServices/RemoteManagement/*.app /System/Library/CoreServices/RemoteManagement/DisabledControls/;
fi

echo "";
# Remove trash files and spying software; reboot system.
echo "Remove trash files and spying software; reboot system? YES \ NO";
read CACHE;
if [ "$CACHE" == "YES" ]; then
 sudo rm -Rf /etc/mach_init_per_user.d/com.adobe*
 sudo rm -Rf /Library/LaunchDaemons/com.adobe*
 sudo rm -Rf /Library/LaunchAgents/com.adobe*
 sudo mv /System/Library/Extensions/AudioAUUC.kext ~/Desktop/;
 sudo rm -Rf /etc/com.apple.screen*;
 sudo rm -Rf /.DS_Store;
 sudo rm -Rf /.DocumentRevisions-V100;
 sudo rm -Rf /.IAProductInfo;
 sudo rm -Rf /.OSInstallMessages;
 sudo rm -Rf /.TALRestoreApps;
 sudo rm -Rf /.hotfiles.btree;
 sudo rm -Rf /.fseventsd;
 sudo rm -Rf /.com.apple.backupd.mvlist.plist;
 sudo rm -Rf /.PKInstallSandboxManager;
 sudo rm -Rf /.Spotlight-V100;
 sudo rm -Rf /.Trashes;
 sudo rm -Rf /.file;
 sudo rm -Rf /.fseventsd;
 sudo rm -Rf /.vol;
 sudo rm -Rf /.TemporaryItems;
 echo "Now run the maintenance scripts...";
 sudo periodic daily;
 sudo periodic weekly;
 sudo periodic monthly;
 echo "10 seconds to reboot;";
 sleep 10;
 sudo reboot;
fi

Сорцы тут:

xShiftx/10.13.4-security-fix

Запуск всего и установка в систему:

sudo ./fix.sh из папки куда скачали.

Останется пара дыр на Audio Video foundation в Safari и вы неуязвим от проникновения. Убирается сложнее, да и Safari лучше чем любой другой браузер. Если захотите лишить себя музыки и видео, то будете совсем как скучный олух, но может пригодится.

Заплатку обновляю по мере изменений потому, что Mac OS с каждым обновлением меняет даже настройки ядра.
 
Забыл отметить, что с данным патчем перестанет работать Captcha Google. Она на комп шманает, что с такой настройкой не произойдет.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!