本当は怖いsudoコマンド

NECセキュリティブログ

2020年10月23日

NECサイバーセキュリティ戦略本部セキュリティ技術センターの山﨑です。
業務でペネトレーションテストを担当していることもあり、Hack The Box[1]などのオンライン演習コンテンツで攻撃テクニックを学びながら、実戦(もちろん業務)に備えています。特に最近は、Linuxマシンにおける権限昇格テクニックの習得に注力しています。
今回のブログでは、Linuxコマンド「sudo」を悪用した権限昇格について紹介します。皆さんのLinuxマシンの設定を見直すきっかけになると幸いです。

  • 本ブログに記載の内容を悪用したクラッキング行為等は絶対におやめください。

1. sudoとは

「スードゥー」、「エスユードゥー」、「スードー」など人それぞれ呼び方は異なりますが、sudoはあるユーザが別のユーザ権限でプログラムを実行するためのコマンドです。何らかの設定変更やパッケージのインストール時など、一般ユーザが特権ユーザの権限(以降、root権限)を必要とする際に使われることが多いです。

sudoの実行権限はvisudoコマンドで設定します。例えば以下の場合、sudoを使うことでuser1は任意のコマンドを、user2は/bin/lsコマンド(のみ)をroot権限で実行できます。

2. sudoを悪用した権限昇格

万が一Linuxマシンに侵入された場合に被害を最小限にする、もしくは、内部犯による不正行為を防ぐために、上述のuser2のようにユーザに付与する権限を最小にすること(ここでは、sudoにより実行できるコマンドを限定すること)は効果的な方法です。しかし、限定しているコマンドによっては攻撃者、内部犯に悪用され、意図しない操作をされてしまうものもあります。いくつか例を挙げてみます。

2-1. スクリプト言語

sudoでの実行権限にPython、Perl、Ruby、AWKなど、スクリプト言語のバイナリを許可している場合、root権限で任意のコマンドが実行可能です。PythonとAWKの例を示します。

  • Python
    Pythonの標準ライブラリであるosモジュールを使用してroot権限のシェルにアクセスできます。
    $ sudo python3 -c 'import os; os.system("/bin/bash")'
  • AWK
    テキストファイルを処理するAWKでは、前処理を行うBEGINパターンを使用します。
    $ sudo awk 'BEGIN {system("/bin/bash")}'

2-2. テキストエディタ/ファイル閲覧コマンド

同様に、vi、vim、nanoなどのテキストエディタや、less、moreなどのファイル閲覧コマンドに対してsudoでの実行を許可している場合、root権限で任意のコマンドが実行可能です。viとnanoの例を示します。

  • vi
    テキストエディタであるviの起動時に-cオプションを付与することで任意のコマンドが実行可能です。起動オプションを指定せず、vi起動後、コマンドモードで「:!bash」を実行しても同様です。
    $ sudo vi –c ‘:!bash’
  • nano
    nanoの場合は、エディタ起動後、^R^X([Ctrl]+R、[Ctrl]+X)により、コマンドの実行結果を挿入する機能があります。この機能を悪用します。
    $ sudo nano
    ^R^X
    reset; bash 1>&0 2>&0

2-3. find

findはファイル名やタイプ、サイズや更新日時など、様々なオプションを付与してファイルやディレクトリを検索するコマンドです。sudoと同様に権限昇格に悪用されやすい「SUIDが設定されたファイル」など、ファイルやディレクトリのパーミッションを指定して検索することも可能です。

findの場合、検索結果に対して別のコマンドを実行する-execオプションを使用することで、root権限のシェルにアクセスできます。

$ sudo find / -exec /bin/bash ¥;

2-4. Nmap

ポートスキャナnmapは、バージョン2.02~5.21には--interactiveというオプションがあり、このオプションからroot権限のシェルにアクセスができましたが、執筆時に利用したバージョン(7.6)では、このオプションはありません。

しかし、別の方法があります。
NmapにはNSE(Nmap Scripting Engine)と呼ばれる各種処理を記述したスクリプト(lua言語で記述)を実行する機能があります。例えば、以下のスクリプトを用意します。

---scriptオプションで上記スクリプトを指定すると、(入力したコマンドが表示されず使いにくいですが)root権限のシェルへアクセスできます。

2-5. その他

その他、意図せず権限を付与している場合に悪用される可能性のあるコマンドとして以下のようなものが挙げられます。

コマンド 想定される悪用例
env、man、tar root権限で任意のコマンド実行
cp、mv /etc/shadowや/etc/sudoersファイルの上書き
chmod ファイル、ディレクトリを任意のパーミッションに変更
scp リモートへのファイル転送

他にも多数あります。こちらnew window[2]でまとめられています。

3. まとめ

sudoを悪用したLinuxマシンの権限昇格について紹介しました。sudoで実行できるコマンドを限定している場合でも、本ブログで紹介したようなコマンドを許可している場合、攻撃者や内部犯に悪用され、意図しない操作をされる可能性があります。Linuxにおける権限昇格手法は他にもあるため、sudoの設定のみに気を付けていれば良いわけではないですが、改めて設定を見直してみてはいかがでしょうか。

参考

執筆者プロフィール

山﨑 泉樹(やまざき せんじゅ)
セキュリティ技術センター リスクハンティングチーム

NECがお客様へ納品するシステム・製品へのペネトレーションテスト、脆弱性診断を通じたセキュア開発支援、NECの社内CTF運営に従事。業後はフィジカルセキュリティの強化に励む。RISS、GPENを保持。