著者:
(1)アンナ・カタリーナ・ヴィッカート、ダルムシュタット工科大学、ダルムシュタット、ドイツ([email protected])
(2)Lars Baumgärtner、ダルムシュタット工科大学、ダルムシュタット、ドイツ([email protected])
(3)フロリアン・ブライトフェルダー、ダルムシュタット工科大学、ダルムシュタット、ドイツ([email protected])
(4)ミラ・メジニ、ダルムシュタット工科大学、ダルムシュタット、ドイツ([email protected])。
5 評価と 5.1 GitHub Python プロジェクト
背景: これまでの調査では、暗号 API を使用する Java アプリの最大 99.59 % が少なくとも 1 回は API を誤用していることがわかっています。ただし、これらの調査は Java と C について実施されており、他の言語の実証的調査は行われていません。たとえば、Python での暗号タスクに関する制御されたユーザー調査では、プロの開発者の 68.5 % が暗号タスク用の安全なソリューションを作成していることがわかっています。
目的: この観察が実際のコードに当てはまるかどうかを理解するために、Python での暗号の誤用に関する調査を実施しました。
方法: 5 つの異なる Python 暗号 API の一般的な誤用をカバーする静的解析ツールを開発しました。この解析では、GitHub の 895 の一般的な Python プロジェクトと組み込みデバイス用の 51 の MicroPython プロジェクトを分析しました。さらに、結果を以前の研究結果と比較しました。
結果: 分析により、Python プロジェクトの 52.26 % に少なくとも 1 つの誤用があることが明らかになりました。さらに、一部の Python 暗号ライブラリの API 設計は、開発者が暗号関数を誤用するのを防ぐのに役立ちます。これは、Java および C コードで実施された調査でより一般的でした。結論: 適切な API 設計が Python アプリケーションの暗号の誤用にプラスの影響を与えることがわかったと結論付けました。さらに、MicroPython プロジェクトの分析により、ハイブリッド分析の重要性が明らかになりました。
暗号化技術(以下、暗号)は、今日ではデータを保護し機密性を確保するために広く使用されています。たとえば、暗号がなければ、オンラインバンキングを安全に使用したり、オンラインショッピングをしたりすることはできません。残念ながら、これまでの研究結果によると、暗号は安全でない方法で使用されることが多いことがわかっています [3、4、7、9、11]。そのような問題の1つは、暗号化などの暗号プリミティブに、安全でないブロックモードなどの安全でないパラメータを選択することです。CryptoREX [13]、 CryptoLint [4]、 CogniCryptSAST [8]、 Cryptoguard [12]など、これらの誤用を識別するための静的解析ツールが多数存在します。
これらのツールとそれぞれの実際の研究はJavaとCに集中していますが、ユーザー研究では、既存のPython APIが暗号の誤用の数を減らすことを示唆しています。Acarら[2]は、307人のGitHubユーザーを対象に、3つの暗号関連の開発タスクを解決する実験を行いました。彼らは、プロの開発者の68.5%が、与えられたタスクに対してPythonで安全なソリューションを書いたことを観察しました。Acarら[1]は、256人のPython開発者が簡単な暗号タスクを解決しようとした制御された実験の中で、Pythonライブラリcryptographyのような単純なAPI設計が、開発者が安全なコードを書くのをサポートすることを特定しました。しかし、Pythonでの暗号の誤用がJavaやCよりも少ない頻度で発生することを実証した実際の研究はまだありません。
Python での暗号の誤用を経験的に評価するために、5 つの異なる Python 暗号 API と Java の JCA API をサポートする多言語解析フレームワークLICMAを紹介します。最も一般的な暗号の誤用を検出するために、すべての Python API に対して 5 つの異なるルール [4] を提供し、JCA に対して 6 つの異なるルール [4] を提供します。LICMA を使用して、GitHub の 895 の人気のある Python アプリと 51 の MicroPython プロジェクトを分析し、Python での誤用に関する洞察を得ました。暗号を使用している Python GitHub アプリの 52.26 % に、1,501 件の誤用を引き起こす少なくとも 1 つの誤用があることがわかりました。合計で、誤用のわずか 7 % がアプリケーション コード自体にあり、残りの誤用は依存関係によって導入されています。さらに、MicroPython プロジェクトの調査により、組み込み分野の開発者は C コードを介して暗号を使用する傾向があることが明らかになりました。したがって、複数の言語にわたってプログラム情報 (呼び出しグラフなど) を追跡できるハイブリッド静的解析の重要性が明らかになりました [5, 10]。
Python API が暗号の悪用を受けにくいかどうかの理解をさらに深めるために、私たちは以下の貢献をします。
• Python と Java での暗号の不正使用を検出するための新しい多言語分析ツール。Python では 5 つの一般的な Python 暗号 API の暗号の不正使用をカバーし、Java では標準 API JCA の暗号の不正使用をカバーします。
• GitHub で最も人気のある 895 個の Python アプリケーションにおける暗号の誤用に関する実証的調査により、1,501 件の誤用が明らかになりました。
• Python アプリケーションでの調査結果と、Android アプリおよび C のファームウェア イメージにおける実際の暗号の悪用に関する以前の調査結果を比較しました。ほとんどの Python アプリケーションはより安全であり、悪用の具体的なタイプ間の分布は大きく異なることがわかりました。
• MicroPython プロジェクトにおける暗号の誤用に関する実証的研究により、ハイブリッド静的解析の重要性が明らかになりました。
• 私たちの研究に使用されたデータセット、分析結果、およびLICMA[1]のコードを含むレプリケーションパッケージ。
この論文は、CC BY 4.0 DEED ライセンスの下でarxiv で公開されています。
[1] dx.doi.org/10.6084/m9.figshare.16499085