web-dev-qa-db-ja.com

rootとして実行されているPostfixマスター

実行中/usr/lib/postfix/masterルートとしてセキュリティ上の脅威を引き起こす可能性がありますか?フレッシュインストールはこれを与えます:

root     11622  0.0  0.0   4792  1432 ?        Ss   19:11   0:00 /usr/lib/postfix/master
postfix  11624  0.0  0.0   4812  1324 ?        S    19:11   0:00 pickup -l -t unix -u -c
postfix  11625  0.0  0.0   4856  1344 ?        S    19:11   0:00 qmgr -l -t unix -u
4
4m1nh4j1

Postfix master プロセスは、他のデーモンを起動するプロセスです。特に、メールをローカルに配信するデーモンを起動します。後者は、システム内のすべてのユーザーIDを偽装できる必要があります。これには、rootとしてのライフの開始が含まれます。したがって、マスタープロセスがrootとして実行されることはほとんど避けられません。それ以外の場合は、まったく機能しません。


さらに、rootとしての実行に伴う「リスク」は、しばしば過大評価されます。たとえば、自分のサーバーで最も恐れているのは、自分のマシンが破壊され、他の人を攻撃するためのリレーとして使用されることです。攻撃者がrootアクセスを取得するか、「通常のユーザー」アクセスのみを取得するかどうかは、その点で大きな変化はありません。

ルートデーモンを非ルートデーモンにして、「セキュリティの向上」を喜ぶ習慣が広まっています。 メインフレームシナリオでの改善は本当です。多くのユーザーが同じマシン上にシェルアカウントを持ち、攻撃者はこれらのユーザーの1人であり、他のユーザーのファイルへのアクセス。ただし、メインフレームモデルはほとんど姿を消しました(以前は大学で普及していましたが、現在ではすべての学生が自分のコンピューターで遊ぶことができます)。マシンが「パーソナル」である場合(たとえば、独自のサーバーがあり、悪意のある個人がそのアカウントを持っていない場合)、一部のデーモンを非ルートUIDで実行する利点はわずかです。それ自体は害はありませんが、「ルートデーモンを修正する」ための複雑な方法で邪魔になることを正当化するものではありません。

Postfixデーモンを安全にするのは、バッファオーバーフローまたは同様の脆弱性がないことです。非ルートとして実行することは、脆弱性が存在し、攻撃者によって悪用された場合の結果を軽減するための単なる方法です。マシンが共有メインフレームでない場合、緩和策はあまり効果がありません。

6
Tom Leek

電子メールを受信して​​ローカルユーザーに配信するサーバーには、2つのことについてroot権限が必要です。

  • 着信接続をリッスンするコンポーネントは、TCPポートをSMTPにバインドする必要があります(SSLなしで25、SSL付きで465))。ルート(またはLinuxなどの適切な機能を持つプロセス)に予約されています。
  • 電子メールを配信するコンポーネントは、procmailやmaildropなどの メール配信エージェント を呼び出せる必要があります。これらのプログラムは、電子メールを受信するユーザーが選択した任意のコードを実行するため、ユーザーを偽装できるプログラムから呼び出す必要があります。呼び出し側のプログラムはrootとして実行する必要があります。

メールの送信に関係するPostfixの部分はrootとして実行する必要はなく、rootとして実行する必要もありません。リモートマシンからの電子メールの受信に関係する部分は、必要なためrootとして実行されます。

非rootユーザーとしてPostfixまたは他のMTAを完全に実行することは可能ですが、これには制限が伴います。

  • 管理者は着信接続をTCPポートに1024を超える別のポートにリダイレクトする必要があります。
  • リモート転送とメールボックスファイルへの直接配信のみが可能で、MDAの呼び出しはできません。さらに、ローカル配信では、メールボックスファイルが配信コンポーネントによって書き込み可能である必要があります。これは、グループ権限で実現できます。

Root以外のプロセスのみを実行することを常にお勧めします。

例として:postfixがシステムで唯一の重要なアプリケーションではない場合、rootとして実行すると、postfixのマスタープロセスにアクセスすることで、敵の作業が減るだけです。システム内の任意の場所(たとえば、すべてのFSへのアクセス、機密情報を含む他のプロセスのダンプ、基本的にrootユーザーが実行できるあらゆる種類の厄介なこと)。それ以外の場合は、特権エスカレーションエクスプロイトを見つける/作成する必要があります。 postfixが単一のアプリケーションであっても、攻撃者がログを削除したり、システム内での存在を隠したりすることははるかに簡単です。

非ルートプロセスが1024未満のポートをバインドする方法があります。

$ cp -v $(which nc) .
'/bin/nc' -> './nc'

$ ./nc -v -l -p 1025

Listening on [0.0.0.0] (family 0, port 1025)
$ ./nc -v -l -p 25
nc: Permission denied

$ Sudo setcap 'cap_net_bind_service=+ep' ./nc

$ ./nc -v -l -p 25
Listening on [0.0.0.0] (family 0, port 25)
Connection from localhost 39964 received!
test

Setcapの詳細については、次を参照してください https://stackoverflow.com/a/414258

最小特権の原則: https://en.wikipedia.org/wiki/Principle_of_least_privilege

2
Andrey Arapov

マスタープロセスをルートとして開始する必要があるのは、最初の1024個の「特権」ポートの範囲内のポートにバインドできるのはルートだけだからです。

Rootとしてあらゆる種類のソフトウェアを実行することはセキュリティスレッドと見なすことができますが、ソフトウェア自体の安全性や、更新/パッチが定期的に適用されるかどうかにも依存します。

セキュリティの層を追加したい場合は、次のことを検討してください。

  1. 1024を超えるポートでリッスンするようにPostfixを構成します。
  2. Postfixマスターデーモンをユーザーpostfixとして実行します。
  3. 手順1で構成したTCPポートにTCP/25を転送するようにIPテーブルを構成します。

これも考慮してください。セキュリティの観点から、Postfixよりもiptablesを信頼していますか?

1
Jeroen