本番サーバーにmakeをインストールしても安全ですか?


42

仮想サーバーインスタンスのセットアップ中に、を使用していくつかのアプリケーションを構築する必要がありますmakemakeインストールしたことに関連するセキュリティ上のリスクはありますか?または、インスタンスをデプロイする前にクリーンアップする必要がありますか?

またgcc、サーバー上にコンパイラーがあり、デプロイする前にアプリケーションをビルドするために使用します。


4
それはあなたが任意のより良い感じさせる場合は、任意のソフトウェアの一部は、インストールのどこかの脆弱性を作成します。
MDMoore313

1
また、サーバーへの非ルートシェルアクセスを持つユーザーは、インストールする必要のない「ディストリビューションに依存しない」コンパイラパッケージ(.tar.gz)をダウンロードできます。

1
私ですか、それとも「安全ですか?」の組み合わせですか?と「ルートアクセス」ではなく、不快ですか?
DNA

2
すでにgccがインストールされている場合、makeが潜在的なセキュリティの問題を悪化させる可能性はほとんどありません。
シャドゥール

1
@Shadur GCCを持つことでどのような違いが生まれますか?ユーザーが既にマシンにアクセスできる場合、gccのコピーを簡単にアップロードできます。とにかく、gccは特権のないユーザーにとって有用であり、特権のあるユーザーが実行しない限りセキュリティ上のリスクはありません。
バリティ

回答:


50

一部の人々は、実動マシン上に開発ツールが存在すると攻撃者の生活が楽になると主張します。しかし、これは攻撃者にとって非常に小さな道のりであり、開発ツールのインストールに対して賛成または反対することができる他の議論はさらに重くなります。

攻撃者がこれまでにシステムに侵入し、サーバーに存在するあらゆるツールを呼び出すことができた場合、すでに重大なセキュリティ侵害が発生しています。開発ツールがなければ、バイナリデータをファイルに書き込み、そのファイルでchmodを実行する他の多くの方法があります。この時点でシステム上でカスタムビルド実行可能ファイルを使用したい攻撃者は、自分のマシン上でそれをビルドしてサーバーに転送することもできます。

他にももっと重要なものがあります。インストールされたソフトウェアにセキュリティバグが含まれている場合、攻撃者にさらされる可能性があるいくつかの方法があります。

  • パッケージには、suidまたはsgid実行可能ファイルを含めることができます。
  • パッケージがシステムでサービスを開始している可能性があります。
  • パッケージは、特定の状況下で自動的に呼び出されるスクリプトをインストールできます(これにはcronジョブが含まれますが、ネットワークインターフェイスの状態が変化したときやユーザーがログインしたときなど、他のイベントによってスクリプトが呼び出されます)。
  • パッケージはデバイスのiノードをインストールできます。

開発ツールが上記のいずれかに一致するとは思わないため、リスクの高いパッケージではありません。

開発ツールを使用するワークフローがある場合は、まずそれらが妥当なワークフローであるかどうかを判断する必要があります。そうである場合は、開発ツールをインストールする必要があります。

サーバー上でこれらのツールを実際に必要としない場合は、複数の理由でそれらのツールをインストールしないでください。

  • サーバーとバックアップの両方でディスク容量を節約します。
  • ソフトウェアのインストールが少ないと、依存関係を簡単に追跡できます。
  • パッケージを必要としない場合、そのセキュリティリスクがごくわずかであっても、追加のセキュリティリスクをインストールしても意味がありません。

セキュリティ上の理由で、権限のないユーザーがサーバーに独自のexecutabelsを配置することを許可しない場合、避けるべきは開発ツールではなく、実行権限でマウントされたファイルシステム上のユーザーに書き込み可能なディレクトリです。そのような状況下でも開発ツールの使用はまだあるかもしれませんが、そうではありません。


6
これに、多くの実動システムが解釈されたコード(PHP、Perl、Pythonなど)に依存していることを付け加えます。このコンテキストで開発ツールを禁止することは意味がありません。コンパイラーgccは、これらよりも高いリスクを提示したくないと考えています。あなたが言うように、システムにインストールされたコンパイラを使用する立場にある攻撃者は、通常、自分の(おそらく静的にリンクされた)実行可能ファイルをアップロードするなど、もっと悪いことをする立場にあります。
ブルーノ

3
関連:wgetのの小さなバージョン(51のバイト?) 。攻撃者が後続のechoステートメントを使用してバイナリをサーバーに移動する実際の例。同じリンクにあるスクリプトを使用して、プロセス全体が自動化されます。
アディ

2
@アドナン、面白い。私の知る限り、このDVRの例の主なセキュリティ上の欠陥は、攻撃者が最初にパスワード123456でrootとしてTelnetできるという事実です。(攻撃の前に)wgetまたは他のツールの有無は、実際にはほとんど関係ありません。
ブルーノ

15

makeは、とは異なる構文を持つシェルですbash

のようなコンパイラgccは、awk標準でawkはサポートされていない一連の置換で構成された強力なものです。POSIXに準拠していsortないかcat、出力にゴミを挿入します。これは、vi起動時に編集を行い、ユーザーインターフェイスを表示する前に終了するように構成された対話型テキストエディター(思考)です。

本質的に安全ではないものはありません。これらは、bash + cat+シェルリダイレクトがあるマシンよりもあなたのマシンをより安全にしません。


2
非常に禅の答えは、私はそれを評価する方法がわかりません。
カスペルド

4
@kasperdこの答えは、真剣であることを意図しています。プログラマーの視点をもたらすことが役立つと思いました。入力が出力に変換される関数は、その出力がCPUが理解できる形式であるという理由だけで脆弱性を導入しません。
イグニス

1
あなたの主張に同意します。あなたの答えは、すでに同意している人にとって素晴らしい読み物だと思います。私はあなたの答えが、それに反対する誰かへの冗談として出くわすかもしれないと心配しています。
カスペルド

私はこの回答が受け入れられたものよりもはるかに好きです:)
Ruslan

15

makeそれ自体は大丈夫です。make単なる依存関係追跡および自動化フレームワークです。ただし、通常はコンパイラと組み合わせて使用​​されますが、コンパイラは完全に不要であるため、実稼働システムでは使用できないことが望ましいです。共有ライブラリー、インタープリターなど、不要なすべてのパッケージについても同じことが言えます。実動システムにインストールされるソフトウェアは厳密に制御される必要があり、アプリケーションに必要なパッケージのみが存在する必要があります。

ビルドサーバーでアプリケーションをビルドし、パッケージ化してから、バイナリパッケージを運用システムに展開する必要があります。

注:ネイティブのパッケージングツールは不愉快です。わざわざそれらをいじろうとしてもいけない。代わりに、Jordan Sisselのをご覧くださいfpm。パッケージングは​​絶対的な喜びになります。


8
ここで好奇心と無知を求めています。なぜコンパイラの存在が「重大なセキュリティ問題」であると言うのですか?コンパイラをインストールした場合のセキュリティ上の問題は何ですか?そもそも実稼働サーバー上でコードをビルドしてはいけないので、コンパイラーが不要なのか、実際にはコンパイラー自体の存在に重大なセキュリティ上の問題があるのか​​ということですか?
reirab

11
別のサーバーでアプリケーションを構築するのは良い考えですが、運用システムにコンパイラが存在することは重大なセキュリティ問題であると言っても意味がありません。スクリプト言語とJITでコンパイルされたシステム(Perl、Python、Javaなど)はどうですか?
ブルーノ

3
実稼働環境でのコンパイラの存在は、「重大なセキュリティリスク」ではありません。私自身は、echoとを使用してバイナリを侵害されたボックスに移動しましたbase64。実際、他のツールを使用せずに、一連のechoステートメントでそれを行うこともできます
アディ

1
良い点、すべて。答えを編集して明確にしました。
EEAA

9

逆に、潜在的な問題を持っていないmake本番サーバー上で、潜在的な問題は、本番サーバー上でアプリケーションを構築する代わりにテスト事前に構築されたイメージを展開しています。この方法論には正当な理由があるかもしれませんが、それを採用するように要求された場合、それは私が激しく反対するものです。


4

運用makeサーバーにインストールする必要があるかどうかを尋ねていますが、私の本当の質問は、その運用サーバーに誰がアクセスでき、侵入に対処するためにどのような保護手段がありますか?場合はmakeインストールされているが、誰かのゲインはなかったrootアクセス、何を思いますか?手動でインストールしmakeたり、必要なものをインストールしたりできます。

コンピューターのセキュリティに関する厳しい現実は、不要なアクセスを防止するのと同じくらい重要です。アクセスをブロックすることに取り付かれることは、それほど重要ではありません。

  1. 誰がサーバーにアクセスできますか?
  2. 侵入の余波からロールバックするために何ができますか?

これは、あなたがどのような仕事をするかにかかっています。私は主にウェブサーバーの世界で仕事をしており、基本的に、私から本番サーバーにアクセスするには誰もがスキル、知識、成熟度を証明する必要があります。それでおしまい。時には数日かかります。時には数ヶ月かかります。しかし、基本的に、運用サーバーでのセキュリティの最善のラインは、サーバーを強化するために行うその他のさまざまなことに加えて、アクセスを制御することです。


1

makeそれ自体は無害です。指定する依存関係とシステムに既に存在するファイルに応じて、設定された順序でアプリケーションを実行するだけです。インストールプロセスの一部としても役立ちます。事前に構築されたファイルを必要な場所に配置したり、単体テストなどを実行したりできます。

ただし、使用する目的を正確に検討する必要があります。多くの場合、アプリケーションを構築するためのコンパイラや他のツールと組み合わせて使用​​されます。これらは、防衛線の一部を無効にするために使用できます。しかしmake、ツールが利用できない場合、これらのことはできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.