著者/所属機関

Akod Rahman (North Carolina State University) et al.

出典

ICSE 2019

目的

Infrastructure as Code (IaC) のスクリプトに存在するセキュリティ上のリスクになりうる記述(Security Smells)の調査

  • Code smellのセキュリティ版を,IaCを対象に調査
  • Security smellsはあくまでsmellなので,必ず問題が起こるわけではない

Methodology

  • まず1726のPuppetスクリプトを分析し,以下のSecurity Smellのパターンを7つ抽出 (本文Fig.4に具体例)
    1. Admin by default: パラメタに対するデフォルト値でユーザをadminにしてしまっている
    2. Empty password: パスワードに長さ0の文字列を使っている
    3. Hard-coded secret: スクリプトにIDやPassが平文で埋め込まれている
    4. Invalid IP address binding: 0.0.0.0をDBやクラウドサービス/インスタンスにバインドしている
    5. Suspicious comment: TODOFIXMEのような不具合が読み取られる可能性のあるコメントが存在する
    6. Use of HTTP without TLS: TLSなしのただのHTTPで通信しようとしている
    7. Use of weak cryptography algorithms: MD4やSHA-1のようなアルゴリズムを暗号化目的で使っている
  • 上記パターンをルールベースでチェックするツールを開発
  • その後,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もパターン化されるはず