著者/所属機関
Akod Rahman (North Carolina State University) et al.
出典
ICSE 2019
- 本会議前なので読んだのはこちらのpre-print
目的
Infrastructure as Code (IaC) のスクリプトに存在するセキュリティ上のリスクになりうる記述(Security Smells)の調査
- Code smellのセキュリティ版を,IaCを対象に調査
- Security smellsはあくまでsmellなので,必ず問題が起こるわけではない
Methodology
- まず1726のPuppetスクリプトを分析し,以下のSecurity Smellのパターンを7つ抽出 (本文Fig.4に具体例)
- Admin by default: パラメタに対するデフォルト値でユーザを
admin
にしてしまっている - Empty password: パスワードに長さ0の文字列を使っている
- Hard-coded secret: スクリプトにIDやPassが平文で埋め込まれている
- Invalid IP address binding:
0.0.0.0
をDBやクラウドサービス/インスタンスにバインドしている - Suspicious comment:
TODO
やFIXME
のような不具合が読み取られる可能性のあるコメントが存在する - Use of HTTP without TLS: TLSなしのただのHTTPで通信しようとしている
- Use of weak cryptography algorithms: MD4やSHA-1のようなアルゴリズムを暗号化目的で使っている
- Admin by default: パラメタに対するデフォルト値でユーザを
- 上記パターンをルールベースでチェックするツールを開発
- その後,293のOSSに含まれる15232のスクリプトに対し,Security Smellの存在やその特性を調査
- またランダムに抽出した1000のsmellをバグレポートとして報告し,開発者の反応を調査
Resarch Question & 結果
RQ1: どんなSecurity smellがIaCで存在するか
前述の7つのパターンがまず起こりうるもの (他にも存在する可能性は当然あり)
RQ2: Security smellがIaCスクリプトの中にどのくらいの頻度で含まれるか
GitHub, Mozilla, Openstack, Wikimediaから抽出したスクリプトで調査 →それぞれ29.3%, 17.9%, 32.9%, 26.7%のスクリプトに,少なくとも1つのsmellが存在した
RQ3: Security smellはどのくらいの期間残存するか (修正されずに残るか)
GitHub, Mozilla, Openstack, Wikimediaから抽出したスクリプトで調査 →何らかのsmellが残存していた月数の(中央値, 最大値)は,それぞれ(24.0, 92.0), (23.5, 77.0), (14.0, 89.0), (20.0, 98.0) 例えばWikimediaのIaCスクリプトでは,何らかのsmellが中央値で20ヶ月,最長で98ヶ月,修正浅れずに残っていた
RQ4: 抽出したsecurity smellに開発者が同意するか
ランダム抽出した1000個のsmellをバグレポートとして報告 → 104の怪盗を93人からもらい,64.4%は同意をもらった
否定された理由は「テスト用だからOK」,「localhostだからOK」など → 理解度の低い人がサンプルとして参照すると,そのやり方をそのまま引き継いでしまうので,その場のリスクに直結しなくても直すべき(というのが著者らの主張)
所感
- タイトルがかっこいいシリーズ
- 結構愚直な研究だけど実用性を感じる
- IaCは,シークレットキーの埋め込みや最小権限が確保されているかなど,他にもセキュリティ上のリスクを抱えやすい(外に可視化してしまう)ので方向性に共感
- smellは汎用的に見えるけど,Puppet以外だと別のsmellもパターン化されるはず
Tagged: #IaC