Pythonアプリケーションに内在する セキュリティ上のバグ/脆弱性を探る

avatar

 2018.10.30  Japanブログ編集部

DevOps」という言葉が叫ばれる今の時代、企業はアプリケーションのセキュリティについて懸念を強めています。しかしながら、アプリケーション固有のセキュリティバグに対する注目度は比較的低いようです。オンライン上の脅威をテストするセキュリティスキャナーは数多く存在しますが、Python、Node.jsで作成したアプリケーション固有の脆弱性検出にはあまり有効ではありません。

なぜPythonか?

Pythonを使用すれば数分で作成できるプロトタイプも、他の言語では数日かかってしまいます。Pythonの中核となるプログラミングは安全ですが、アプリケーションの開発に使用されるサードパーティ製のコンポーネントはそうでない可能性があります。そのため、脆弱性やバグがないかを調べるセキュリティスキャナーが必要となります。PythonやDjangoを使用する開発者で、高度なセキュリティを必要とする大型のデータベースを扱う方には、そのようなセキュリティスキャナーは必須です。

Pythonに内在するリスクの高い脆弱性

Pythonを使う開発者が気にかけるべき脆弱性のタイプを以下に紹介します。

SQLインジェクション(SQLI)

悪意のあるユーザーが、バックエンドのデータベースサーバーにおいて、アプリケーションのSQLステートメントの実行をコントロールします。SQLiには以下の4つのサブクラスがあります。

  1. インバンドSQLインジェクション/クラシックSQLi
  2. インファレンシャル/ブラインドSQLインジェクション
  3. DBMS SQLi
  4. 複合型SQLi(例:Storm Worm)
  • SQLi+不適切な認証
  • SQLi+DDoS攻撃
  • SQLi+DNSハイジャック
  • SQLi+XSS

クロスサイトスクリプティング(XSS)

XSSは、攻撃者がWebアプリケーションを騙して、そのアプリケーションのユーザーが気づかないうちに、保存されたCookie、パスワード、およびスクリプトコードを盗む手口です。

クロスサイト・リクエスト・フォージェリー(CSRF)

侵害されたWebサイト上で、ログインした別のユーザーがあるアクション(たとえば、ボタンをクリック)を行うと、特定のアクションが実行されるようにする攻撃です。また、別の人物のログイン情報を使用したWebサイトのハッキングやロギングもこの攻撃に含まれます。

LDAP(LIGHTWEIGHT DIRECTORY ACCESS PROTOCOL)インジェクション

攻撃者がLDAPステートメントを挿入/改ざんして情報の推測を行おうとします。

コマンドインジェクション

攻撃者がOSコマンドをWebサーバー上で不正に実行し、自身のコマンドを挿入してサーバーを乗っ取る攻撃です。

XPATHI

攻撃者が故意にWebサイトにデータを送ります。そのインタラクションを利用して、XML内でデータがどのように構造化されているかを調べます。または、通常ではアクセスできない保護されたデータにアクセスします。

セキュリティスキャナー

それでは、Pythonアプリケーションの脆弱性を検出するセキュリティスキャナーを紹介しましょう。

  • Python Taint(PYT) – 静的解析ツール:このユーティリティは、Python Webアプリ内のコマンドインジェクション、XSS、SQLi、プロシージャ間、パストラバーサルHTTP攻撃を特定するために使用されます。Python Taintは、Flaskというフレームワークを使用して構築された理論的基盤である制御フローグラフ、データフロー解析、および不動点をベースにしています。
  • Tinfoil Security社のWebsite Scanner:Tinfoilは、PythonとDjangoを対象とした、手頃な価格のセキュリティスキャナーです。Webサーバーやアプリケーションの抜け穴を見つけ出し、修正方法を教えてくれます。
  • Bandit – ASTベースのスタティックアナライザー:Pythonのプログラミングにおける一般的なセキュリティリスクを特定する、OpenStackのセキュリティLintツールです。Banditは、pipを使用して配布されます。ソースからbanditをインストールするには、PyPIからソースTarballをダウンロードした後に、python setup.py installコマンドを実行します。Banditが提供するレポートにもアクセスできます。
  • Pyntch – スタティックコードアナライザー: Pyntch(PYthoN Type CHecker)は、例外、属性が見つからない、あるいは変数の型のミスマッチといったランタイムエラーを検出します。現在は、Python 2.xをサポートしています。PycheckerやPyflakesとは異なり、スタイルの問題は扱いませんが、高速かつ効率的で、1分以内に何千行ものスキャンが可能です。
  • Spaghettiセキュリティスキャナー:Spaghettiは、Python version 2.7で構築されたオープンソースのWebアプリケーション用セキュリティスキャナーです。デフォルトファイル、設定ミス、安全性の低いファイルを検出し、Django、CherryPy、CakePHPなどの多数のフレームワークをサポートしています。このツールは、Adminパネルへの攻撃、cookieのセキュリティ、クレジットカード/電子メール/プライベートIPの公開、SQLインジェクション、ShellShock、Struts-shock、Apache ModStatus、Anonymous cipherなどの攻撃を検出することができます。
  • Rough Auditing Tools for Security(RATS):C、C ++、PHP、Perl、Pythonなどの言語をスキャンし、TOC(Time of Check)、TOU(Time of Use)、バッファオーバーフロー、Acunetixなどのセキュリティに関連するエラーを検出する無料のツールです。手動によるコード・イントロスペクションは必要となるものの、非常に役に立つツールです。
  • PyDbgEng – WindowsデバッグエンジンのPythonラッパー:ユーザーモード、カーネルモード、ソフトウェアとハードウェアのブレークポイントなどのデバッグに役立ちます。このPyDbgEngを使用して、フォルトインジェクション、アプリケーションのファジング、および実行ファイルの解凍を自動的に行うことができます。
  • python-ptrace:Pythonで開発および記述されたptraceを使用する、オープンソースのデバッグツールです。ptraceは、Linux、BSD、Darwinでシステムコールを処理するトレーサーとして機能します。
  • vdb/vtrace – エクスプロイト/マルウェア解析を行うためのデバッガーVDBは動的デバッグコンポーネントを意味します。vtraceは、Pythonで実装されたフレームワークをデバッグする際に使用されるプラットフォームを指します。VDBはvtraceを使用します。
  • Immunity Debugger – Pythonの侵入テストツール:このツールはPythonのスクリプトを使用し、WindowsのGUIおよびコマンドラインデバッガーをサポートします。
  • Mona.py – オープンなイミュニティデバッガー:pvefindaddr を置き換えるPyCommandです。パフォーマンスの問題を解決します。

上記のツールは、Pythonを使用して作成されたWebアプリケーションに内在するセキュリティ上の脆弱性発見に役立ちます。

執筆者について:Tejaswini ULは、テクノロジーライティングに愛と情熱を傾けています。そのため彼女はこの業界を選びました。現在彼女はMindmajix Technologies社のオペレーションリーダーとして働いています。これまでのキャリアでは、テクノロジーイノベーションに関する数多くの記事を寄稿しました。余暇には、手芸を楽しんでいます。また、Pythonプログラミングの研究に没頭し、その利用方法に関する記事やチュートリアルを発表しています。

編集者注:ゲスト執筆者による本記事の意見は、筆者自身の意見であり、必ずしもTripwire Inc.の意見を反映するものではありません。

TRIPWIRE IP360 データシート

RECOMMEND関連記事


RECENT POST「VERT」の最新記事


この記事が気に入ったらいいねしよう!