前回
https://chocopurin.hatenablog.com/entry/2020/08/08/222013
の続き、目的のPysaに入ります。
Pysaを知るには、チュートリアルPJ
https://github.com/facebook/pyre-check/tree/master/pysa_tutorial
を試した方がよいとのことですが、まずは正攻法で公式ドキュメントから。
Running Pysa
https://pyre-check.org/docs/pysa-running.html
をなぞってみました。
環境は前回のDockerコンテナをそのまま使っています。
(1)必要なファイル群
カッコ内は原文および本件におけるファイル名です。
各々が何を表しているかは原文参照。
・診断対象のソースコード(source.py) ・Taintコンフィグファイル(taint.config) ・Taintスタブ(general.pysa) ・Pysaコンフィグレーション(.pysa_configration)
(2)診断対象の作成
root@[コンテナ名]:/# cd ~ root@[コンテナ名]:~# mkdir static_analysis_example root@[コンテナ名]:~# apt-get install vim エディタ入ってなかったので、急遽追加 root@[コンテナ名]:~# vi static_analysis_example/source.py コードは原文参照
(3)taint.configの作成
root@[コンテナ名]:~# mkdir -p static_analysis_example/stubs/taint root@[コンテナ名]:~# vi static_analysis_example/stubs/taint/taint.config コードは原文参照
(4)Taintスタブの作成
root@[コンテナ名]:~# vi static_analysis_example/stubs/taint/general.pysa コードは原文参照
(5)Pysaコンフィグレーションファイルの作成
root@[コンテナ名]:~# vi static_analysis_example/.pyre_configuration コードは原文参照
(6)分析の実行
root@[コンテナ名]:~# cd static_analysis_example root@[コンテナ名]:~/static_analysis_example# source ~/.venvs/venv/bin/activate (venv) root@[コンテナ名]:~/static_analysis_example# pyre analyze 解析が走って、下記が表示される。 実行時点では原文の内容に加えて"stop_line"と"stop_column"という項目がある。 [ { "line": 9, "column": 22, "stop_line": 9, "stop_column": 32, "path": "source.py", "code": 5001, "name": "Possible shell injection", "description": "Possible shell injection [5001]: Data from [UserControlled] source(s) may reach [RemoteCodeExecution] sink(s)", "long_description": "Possible shell injection [5001]: Data from [UserControlled] source(s) may reach [RemoteCodeExecution] sink(s)", "concise_description": "Possible shell injection [5001]: Data from [UserControlled] source(s) may reach [RemoteCodeExecution] sink(s)", "inference": null, "define": "source.convert" } ]
(6)その他
--save-results-toオプションをつけると、詳細結果がtaint-output.jsonとして保存される。
taint-output.jsonは原文「Static Analysis Post Processor」
https://pyre-check.org/docs/static-analysis-post-processor.html
で使う模様。
(venv) root@[コンテナ名]:~/static_analysis_example# pyre analyze --save-results-to ./ (venv) root@[コンテナ名]:~/static_analysis_example# ls source.py stubs taint-metadata.json taint-output.json (venv) root@[コンテナ名]:~/static_analysis_example# cat taint-output.json 何かしら、長いJSONが表示される。