Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ファイルアクセスに関する脆弱性
Search
carotene4035
September 02, 2018
0
100
ファイルアクセスに関する脆弱性
carotene4035
September 02, 2018
Tweet
Share
More Decks by carotene4035
See All by carotene4035
GraphQLのN+1問題を解決したい
carotene4035
1
180
読者を置き去りにする技術
carotene4035
13
8.1k
Aws is emotional.
carotene4035
2
270
名称未設定.pdf
carotene4035
0
200
migrationツールについて
carotene4035
0
77
AWSネットワーク入門
carotene4035
2
300
adtech history
carotene4035
0
63
僕らだけのアニメを放映する
carotene4035
3
1.3k
使いやすい広告管理画面について考えてみる
carotene4035
0
38
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
The Cost Of JavaScript in 2023
addyosmani
45
6.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
655
59k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Docker and Python
trallard
40
3.1k
How STYLIGHT went responsive
nonsquared
95
5.2k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
130
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
Bash Introduction
62gerente
608
210k
Transcript
第3回 徳丸本輪読会 ファイルアクセスにまつわる問題 かろてん
問題のあるwebアプリ • サーバ上のファイル名を外部からパラメータ の形で指定できるアプリケーション – テンプレートファイルをパラメータで指定している ようなケース
それによって可能になる攻撃 • ディレクトリ・トラバーサル – webサーバ内のファイルに対する不正アクセス • OSコマンドの呼び出し
– OSコマンド・インジェクション
ディレクトリ・トラバーサル
ディレクトリ・トラバーサル • ディレクトリ・トラバーサル – webサーバ内のファイルに対する不正アクセス • OSコマンドの呼び出し – OSコマンド・インジェクション
ディレクトリ・トラバーサルの影響 • Webサーバ内のファイルの閲覧 – 重要情報の漏えい • Webサーバ内のファイルの改ざん、削除
– Webコンテンツ改ざんによるデマ、誹謗中傷の書き込み – マルウェアのサイトに誘導する仕組みの書き込み – スクリプトファイルや設定ファル削除によるサーバ機能の停止 – スクリプトファイル改ざんによる任意のサーバスクリプト実行
ディレクトリ・トラバーサルの対策 • 外部からファイル名を指定できる仕様を避ける • ファイル名にディレクトリ名が含まれないようにする • ファイル名を英数字に限定する
攻撃手法 • 画面テンプレートのファイルを template=の形で指定できるスクリプト
攻撃手法 • 画面テンプレート – 春のキャンペーン と書かれている – ディレクトリ構成は以下
攻撃手法 • h0ps://security-‐directory-‐carotene.c9users.io/4a-‐001.php? template=spring にアクセスすると 「春のキャンペーン」と表示される。
攻撃手法 • 以下のディレクトリ構成 • h0ps://security-‐directory-‐carotene.c9users.io/4a-‐001.php?template=../ etc/hosts%00 • 末尾にNULLバイト
攻撃手法 • Warning: readfile() expects parameter 1 to be a
valid path, string given in /home/ubuntu/workspace/4a-‐001.php on line 7 Call Stack: 0.0008 233960 1. {main}() /home/ubuntu/ workspace/4a-‐001.php:0 0.0009 234336 2. readfile() /home/ ubuntu/workspace/4a-‐001.php:7 • あれ、、、情報漏えいしないぞ
攻撃手法 • Php5.3.4以降では、ファイル名などにnull byteを含む場合、 多くの関数でエラーになるように変更された • h0p://php.net/manual/en/security.filesystem.nullbytes.php •
h0ps://bugs.php.net/bug.php?id=39863
攻撃事例
攻撃事例
攻撃事例 • 公式サイド – (追記@4/10 17:00)問題の機器「Miele Professional PG 8528」は食器洗い機ではなく、
「washer-‐disinfector」(洗浄消毒器)とのこと。3月29日付けでMiele社がこれについての プレスリリースを出しており、「脆弱性があったことは事実だが、この機器は食器洗い機 ではなく消毒器である」「問題の脆弱性によってハッカーがパスワードを取得し機器の ソフトウェアにアクセスできる可能性はあるが、これによって問題の機器が『踏み台』と して使われる可能性は低い」「ソフトウェアのアップデートにも取り組んでいる」としてい る。
攻撃事例 • 脆弱性詳細 h0p://seclists.org/fulldisclosure/2017/Mar/63
芋づる式に情報が漏洩 • この攻撃はファイル名が分かっている必要がある • 第三者にはファイル名が知られていない個人ファイルなどは 安全、、、 • というわけではない
• ディレクトリトラバーサルにより スクリプトのソースファイルを閲覧して、そこからファイル名を 取得するという方法がある
脆弱性が生まれる原因 • ファイル名を外部から指定できる • ファイル名として、絶対パスや相対パスの形で異なるディレク トリを指定できる • 組み立てたファイル名に対するアクセスの可否をチェックして
いない • (心理的なところで言えば) 異なるディレクトトリを指定できることに対する考慮漏れ
対策 • 外部からファイル名を指定できる仕様を避ける • ファイル名にディレクトリ名が含まれないようにする • ファイル名を英数字に限定する
対策(その1) • 外部からファイル名を指定できる仕様を避ける – ファイル名を固定にする – ファイル名をセッション変数に保持する
– ファイル名を直接指定するのではなく番号などで間接的に指定する
対策(その2) • ファイル名にディレクトリ名が含まれないようにする – ../を含まないようにする – /や\、:などいろんな形があるので、それらをまとめて扱える関数を使 いたい
– Phpの場合はbasename関数 – basename(‘../../../etc/hosts’) → hosts
対策(その2) • ファイル名にディレクトリ名が含まれないようにする – basenameはnullバイトが有っても削除しない – $file =
basename($path) . ‘.txt’; – $path = a.php%00 とすると.txt以下が無視されa.phpになってしまう – ファイル名の妥当性チェックにより防ぐ – ただ、php5.3.4以降はヌルバイトを渡すとエラー
対策(その3) • ファイル名を英数字に限定する(記号文字を弾く) – preg_match(‘/\A[a-‐z0-‐9]+\z/ui’, $tmpl) – ただし、eregはバイナリセーフじゃない
– 4.2入力処理とセキュリティ を参照
意図しないファイル公開
概要 • 外部から閲覧されるとこまるファイルをweb サーバの公開ディレクトリに配置している場 合 – 重要情報の漏洩につながる – 対策
• 公開ディレクトリには非公開ファイルを置かないこと • ディレクトリ・リスティングを無効にする
ディレクトリ・リスティング
ディレクトリ・リスティング (ザッカーバーグもやってた)
脆弱性が生まれる原因 • 外部から閲覧できる条件 – ファイルが公開ディレクトリに置かれている – ファイルに対するURLを知る手段がある – ファイルに対するアクセス制限がかかっていない
脆弱性が生まれる原因 • ファイルに対するURLを知る手段 – ディレクトリ・リスティング – ファイル名が日付やユーザ名、連番 – User.dat, data.txtなどありがちな名前
脆弱性が生まれる原因 • ありがちな名前とは – 実際のアクセスログ
対策 • アプリケーションの設計時に、ファイルの安全 な格納場所を決める • レンタルサーバを契約する場合は非公開ディ レクトリが利用できることを確認する
対策 • ディレクトリ・リスティングを無効にする • h0p.confもしくは.htaccess
<Directory パス指定> Opkons -‐Indexes </Directory>
対策 • Apache HTTP Serverで特定のファイルを隠す 方法 – ファイルの移動ができない場合、 .htaccessで暫定的に対応できる
対策 <Files “*.txt”> deny from all </Files>