ハッカーの権限昇格とは。攻撃者が「管理者」になる危険な仕組みを徹底解説

ペネトレーションテスト&バグバウンティ

ふだん、パソコンやスマホには「ふつうの人(ユーザー)」と「全部できる人(管理者)」がいます。でも、悪い人がこの仕組みをうまく利用して、ふつうの人から管理者になってしまうことがあります。これを「権限昇格(けんげんしょうかく)」といいます。
※イメージです。

権限昇格とは

パソコンやスマホの中では、それぞれの人やアプリに「できることのレベル(=権限)」が決められています。
たとえば
・一般ユーザーは、必要なことだけできる。(ゲームをしたり、ファイルを保存したり)
・管理者(root)は、全部できる。(設定の変更・他の人のファイルの操作など)
 
本来、この「管理者」になるには、パスワードを知っているとか、特別な手順を踏まないといけません。でも、悪い人が、プログラムのミスや設定のスキをついて、一般ユーザーのまま管理者になってしまうのです。
 
このように、「自分のレベルを勝手に上げてしまう攻撃」のことを 権限昇格(Privilege Escalation) と呼びます。
 なぜ危ないのかと言うと、管理者になれると、次のようなことが簡単にできてしまいます。
・システムファイルを削除・改ざん。
・他のユーザーのデータを盗む。
・マルウェア(悪意のあるプログラム)を仕込む。
 
つまり、コンピュータやサーバーが完全に乗っ取られる危険があるのです。
 
 

垂直と水平、2種類の権限昇格

「権限昇格(Privilege Escalation)」には、大きく分けて 2つのタイプ があります。
それが「垂直」と「水平」です。
名前だけだと分かりづらいですが、簡単に言えばこういうことです。
 

垂直的な権限昇格(Vertical Privilege Escalation)

・一般ユーザー → 管理者(root)になる。
これは「自分の立場を1段上に上げる」ようなイメージです。
たとえば学校で言うなら、生徒が先生のIDを使って学校のシステムにログインし、成績を勝手に変えてしまうような状態です。
 
なぜ、起きるのか。
・管理者用プログラムにバグがある。
・設定ファイルのアクセス権がゆるい。
・setuid(特殊なファイルアクセス権)が悪用される。
 
垂直的な権限昇格を行うことにより、
・システム全体が乗っ取られる。
・他のすべての人の情報にアクセスできてしまう。
・ウイルスやマルウェアを仕込めるようになる。
 

水平的な権限昇格(Horizontal Privilege Escalation)

・自分と同じレベルの「他人」になりすます。
これは「同じ段の中で他人にすり替わる」ようなイメージです。
たとえば、あるユーザーが「自分のアカウント」でログインしているのに、URLの番号を変えるだけで、別の人の情報を見られてしまうようなケースです。
 
例として、
http://example.com/profile?id=1001
http://example.com/profile?id=1002 ← 他の人のデータが見えてしまう
 
なぜ、起きるのか。
・アクセス制限の確認が足りない。
・クッキーやセッションのチェックが不十分。
・ユーザーごとの表示制限がされていない。
 
水平的な権限昇格を行うことにより、
・他ユーザー(同レベル)へのなりすまし。たとえば他人のWebアカウントへ侵入。
・他人のデータが盗まれます。(プライバシーの問題)
 
 

発生原因(どこにスキがあるのか?)

・OS・カーネル・ドライバの脆弱性。(例:Dirty COW、sudoバグ)
・SUIDビットつきバイナリの誤設定。
・sudoersの設定ミス。
・パーミッションの緩いファイル・ディレクトリ。
・Webアプリでの認可漏れやIDOR。(不適切な直接オブジェクト参照)
 
 

エクスプロイト手法、どうやって昇格するのか?

権限昇格(Privilege Escalation)を実現するには、システムやプログラムにある「スキ」や「設定ミス」をうまく突く必要があります。
・バイナリ悪用:SUID付きプログラムからシェル奪取。
・環境変数のすり替え。(PATHやLD_PRELOAD)
・crontab、init.d、systemdの悪用。
・tcache poisoningなどのヒープエクスプロイト経由。
・カーネルエクスプロイト。(例:Dirty Pipe)
 
 

守るための対策として

権限昇格は、攻撃者が「本来できないこと」をできるようにしてしまう、非常に危険な攻撃です。
でも、きちんと対策すれば、しっかり防ぐことができます。
・SUIDの見直しと最小化
SUIDがついたプログラムは、一般ユーザーでもrootの力で実行できてしまう。
バグがあれば、簡単に乗っ取られる危険があります。
 
・ソフトウェアは常にアップデート
古いアプリやOSには、すでに知られている脆弱性(バグ)がたくさん。
その情報を使えば、誰でも簡単に攻撃できてしまう。
 
・アクセス権(パーミッション)の確認
誰でもファイルを書き換えられたり、読めてしまったりする設定だと、中身を盗まれたり、悪意あるコードを入れられる。
 
・cronやスクリプトの設定に注意
cron(定期的に動くプログラム)が誰でも編集できるファイルを実行していたら、そこに悪意ある命令を入れられる。
 
・ログと監視システムの導入
万が一攻撃を受けたとき、「何が起きたか」をすぐに気づくことができる。
 
 

ハッカーの権限昇格とは。攻撃者が「管理者」になる危険な仕組みを徹底解説のまとめ

権限昇格は「静かな破壊」の始まりで、本来「一般ユーザー」が持っていない「管理者権限(root)」を、悪用やバグを使って手に入れてしまう攻撃のことです。
たての昇格(垂直)では一般ユーザーが管理者になり、よこの昇格(水平)では他人になりすまします。
原因は、プログラムのバグや設定ミス、特別な機能(SUIDなど)の悪用などがあります。たとえばWebのIDを変えて他人の情報を見る、Linuxの設定ミスで管理者のコマンドを実行するなどです。対策には、アクセス権の見直し、不要な権限の削除、ソフトの更新などが重要です。