こんにちは!
ナビゲータのEVEです。
昨日は、バッチ処理のプログラムをどう製造するのかお話ししました。その話の中で、サーバーサイトプログラムからOSコマンドを実行するのは危険だという話をしました。。その理由について、自分として理解はしていますが、不足している点があるかもしれないので、ChatGPTになんで、サーバーサイトからOSコマンドを実行するのは危険なのか聞いてみました。
❶セキュリティリスク
サーバーサイドのプログラム内でOSコマンドを直接実行すると、悪意のあるユーザーが意図しないコマンドを注入し、システムやデータを攻撃する可能性があります。例えば、外部からの入力値が適切に検証やエスケープ処理されていない場合、攻撃者はコマンドインジェクションと呼ばれる手法を使って、任意のコマンドを実行できます。
❷特権の権限拡大
サーバーサイドのプログラム内でOSコマンドを実行する場合、そのプログラムが実行されているユーザーの権限でコマンドが実行されます。もし不適切な権限でプログラムが実行されている場合、攻撃者は特権の昇格を試みることができ、システムの制御を乗っ取る可能性があります。
❸互換性と可搬性の問題
サーバーサイドのプログラム内でOSコマンドを直接使用すると、そのプログラムは特定のオペレーティングシステムに依存してしまいます。異なるオペレーティングシステムを使用する場合、同じコマンドが利用できない可能性があり、プログラムの可搬性や互換性に問題が生じる可能性があります。
❹プログラムの信頼性
サーバーサイドのプログラム内でOSコマンドを実行すると、プログラムの複雑性が増し、バグやエラーが発生する可能性が高くなります。バグが存在する場合、意図しない動作や予期しない結果が発生し、システムの安定性や信頼性に影響を与える可能性があります。
以上です。❶❷については同意しますが、❸❹はどうでしょうか?❹は違うと思いますし、❸については、他のシステムへの移植を考慮しての回答だと思いますが、現在考えていませんし、サーバーサイトプログラム内で、OSコマンドを多用するつもりはないので、気にする必要はないでしょう?
この質問に対して、ChatGPTは、対策についても提示してくれました。見てみましょう。
@セキュアなAPIを使用する
サーバーサイドのプログラムが他のシステムやサービスと対話する必要がある場合、セキュアなAPIやライブラリを使用して、直接OSコマンドを実行する代わりに、API経由で操作を行います。
Aユーザー入力の適切な検証とエスケープ処理
外部からの入力値は適切に検証やエスケープ処理を行い、不正なコマンドやインジェクション攻撃を防ぐ必要があります。
Bサーバーの権限管理
サーバーサイドのプログラムが実行されるユーザーの権限を適切に制限し、最小限の特権でプログラムを実行するようにします。
Aは、今回の事例から外れますが、@とBについては、今まで製造してきたシステムのセキュリティポリシーと合致します。
[あとがき]
ChatGPTが提示してくれた、@Bの方法に対して、実際にどんな対策をするのか、本日は、時間がなくなってしまったので、明日きちんと解説をします。
プログラムを作る場合、いろいろとセキュリティを考えたうえで開発をしなくては、いけません。セキュリティを考慮しないでプログラム製造をして、会社から損害賠償請求をされたという事例が過去にあります。裁判では、損害賠償請求を認め、会社だけでなく、開発担当責任者も損害賠償請求を負いました。
セキュリティエンジニアとしてできるだけ知っている情報は発信していきますので、時々でもいいですから、ブログを読んで、感想などいただければ、うれしいです。
なお、損害賠償に訴えられた事例については、以前、動画、YouTubeで作りました。もし、ご興味がございましたら、ご覧ください。
では、また!
■【情報処理安全確保支援士資格取得のすすめ】[セキュリティ研究室]
https://youtu.be/L_yM6-ojK04
■2023年7月12日現在
修正ファイル本数 21/28(1ファイル修正)
修正関数本数 45/78(14関数修正)