私のサーバーの一部のサービスを強化しようとしています。
この目的のために、私はsystemctlサービス構成を使用しています。特定のサービスに対して、たとえばシステムコールホワイトstrace
リストを生成するために通常の操作で使用されるシステムコールを確認します。これは私のopenvpn.service設定です。
[Unit]
Description=a given service I want to restrict systemcalls
After=syslog.target network-online.target
Wants=network-online.target
Documentation=man:openvpn(8) service
[Service]
Type=notify
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
KillMode=process
RestartSec=5s
Restart=on-failure
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/server/vpn.conf
ProtectHome=yes
User=openvpn
Group=openvpn
SystemCallFilter=
CapabilityBoundingSet=CAP_NET_ADMIN
AmbientCapabilities=CAP_NET_ADMIN
ProtectSystem=strict
PrivateTmp=yes
#PrivateDevices=yes
RestrictNamespaces=yes
RestrictAddressFamilies=AF_INET
NoNewPrivileges=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
ProtectControlGroups=yes
MemoryDenyWriteExecute=yes
[Install]
WantedBy=multi-user.target
straceを使用してコマンドラインで実行すると、少なくともsendto
システムコールが使用されていることがわかります。recvfrom
ただし、SystemCallFilter(SystemCallFilter=
)をクリアすると、サービスはまだロードされ、正常に実行されます。
では、このオプションは実際に考慮されますか(たとえば、スペルを誤って書いたり、すべてを無効にしたりするのが正しい構文ではない可能性があります)。それとも、このオプションは自分で処理せずにopenvpn
開始されるサービスに対してのみ機能しますかopenvpn
?
問題は、この関数を使用したいのですが、実際に何をすべきかを確認する方法がないことです。リストされたシステムコールのみを許可します。
ご協力ありがとうございます!
答え1
straceを使用してコマンドラインで実行すると、少なくとも
sendto
システムコールが使用されていることがわかります。recvfrom
ただし、SystemCallFilter(SystemCallFilter=
)をクリアすると、サービスはまだロードされ、正常に実行されます。
CapabilityBoundingSet=CAP_NET_ADMIN AmbientCapabilities=CAP_NET_ADMIN
回答
上記の質問の2つは、OpenVPNサービスがすべての必要なシステムコールにアクセスできる理由に対する答えを提供します。
まず、SystemCallFilter=
すべてのシステムコールをブロックしないでください。マンページ:
execve
、、、、、、システムコール、および時間およびスリープクエリのシステムコールは暗黙的にホワイトリストに含まexit
れて いるため、明示的にリストする必要はありません。exit_group
getrlimit
rt_sigreturn
sigreturn
第二:見るとsocket(7)
マニュアルページでプロセス/ファイルに設定すると、ほとんどすべてのソケット関連のシステムコール(およびsendto
含むrecvfrom
)とネットワークインターフェイスの操作機能にアクセスできることがわかります。CAP_NET_ADMIN
capabilities(7)
マンページ:
CAP_NET_ADMIN Perform various network-related operations: * interface configuration; * administration of IP firewall, masquerading, and accounting; * modify routing tables; * bind to any address for transparent proxying; * set type-of-service (TOS) * clear driver statistics; * set promiscuous mode; * enabling multicasting; * use setsockopt(2) to set the following socket options: SO_DEBUG, SO_MARK, SO_PRIORITY (for a priority outside the range 0 to 6), SO_RCVBUFFORCE, and SO_SNDBUFFORCE.
3番目:、、、、、、、、、、、またはオプションによって無視されますNoNewPrivileges=
。上記のマンページを見てください。SystemCallFilter=
SystemCallArchitectures=
RestrictAddressFamilies=
RestrictNamespaces=
PrivateDevices=
ProtectKernelTunables=
ProtectKernelModules=
MemoryDenyWriteExecute=
RestrictRealtime=
LockPersonality=
文書を見るとsystemd
警告がいっぱいであることがわかるので、このようなシステムコールを許可しなくても警告はCAP_NET_ADMIN
。
これを使用してsystemd-analyze syscall-filter
openvpn サービスを再確認できます。