Pythonはセキュリティ対策が必要か|Pythonのセキュリティ対策4つ

Pythonとは?

Pythonはプログラミング言語の一つで、プログラム方法がシンプルなデザインで人気があります。拡張性がありシステム管理ツールやアプリケーション開発など広く活用されています。

機械学習の優れた科学技術計算ツールとして高い評価を受け、2020年度から日本の国家資格「基本情報技術者試験」の内容にPythonが追加されました。

PythonはAI(人工知能)分野や教育や初心者向けの言語として多く使用されています。

Pythonを使うメリット5つ

Pythonを使うメリットは主に5つあります。C言語と相性が良く、ツール作りやプログラミングがシンプルでわかりやすい、ライブラリ機能が種類豊富で効率的な構築ができます。

また単一のプログラムで複数の動作環境に対応できる汎用性の高さが評価されています。この5つのメリットについて詳しくお話しします。

Pythonを使うメリット1:C言語との相性が良い

C言語は1972年に登場した、Pythonよりも古いプログラミング言語です。PythonからC言語を呼び出せる方法がいくつかあり、「Python/C API」という拡張モジュールが標準機能として用意されています。

既存のC言語やC++のコードにラッパー(包囲すること)を組み合わせて、Python上で利用ができます。既存のC言語プログラムを活用することが可能です。

Pythonを使うメリット2:ツール作りが容易

Pythonの機能にpyperclipモジュールというクリップボード(コピー&ペースト)機能があります。この機能を使うとPythonスクリプト(簡易的なプログラム)を簡単に組込むことができ、ツール作りが容易です。

pyperclipモジュールを使ったツール作りは、エンジニアではなくても初心者でもツールを簡単につくることができる便利な機能です。

Pythonを使うメリット3:プログラム作りが容易

Pythonはシステム管理ツールやアプリケーション開発、Webサービスで利用されている汎用的なプログラミング言語です。

ソースコードが少なく誰が書いてもシンプルでわかりやすくエラーになりづらいので、簡単に短時間でプログラムができます。

実行できる形式に変換(コンパイル)を行う必要がないインタプリタ言語なので、プログラム実行時間を短縮できます。

Pythonを使うメリット4:膨大なライブラリの数がある

Pythonの膨大なライブラリには関数やクラスがまとめられています。Webサイトの構築、人工知能や機械学習分野に利用できるライブラリなどが用意されています。

GitHubやPyPI(Python Package Index)のライブラリから必要なものをインストールできます。それ以外に標準ライブラリがあります。テキスト処理、ファイル処理、ネットワーク処理など多様なライブラリはインストール無しで使用できます。

Pythonを使うメリット5:単一のプログラムで複数の動作環境に対応できる

Pythonの統合開発環境(IDE)機能があります。一つのプログラムで複数の動作環境に対応することができます。ソフトウェア開発、コーディング、コンパイル、リンク、テスト、バージョン管理が一つの機能で連携させながら作業効率を向上できます。

半自動化する機能やプログラムの管理性が高まる、チーム開発の実現ができます。

Pythonはなぜセキュリティ対策が必要なのか

pythonは誰もがプログラムを理解しやすく開発がスムーズにできます。アプリ開発などでサードパーティ製の(特定のプログラム)コンポーネントの組合せが容易です。Pythonの活用は幅広く使用者が多い言語です。

使いやすさや普及拡大が容易である以上、安全な環境の上で成り立っているのかセキュリティの脆弱性が問題視されています。

セキュリティ対策を合わせて行う必要があるということです。

Pythonのセキュリティ対策4つ

一般的なセキュリティ対策からPython向けのセキュリティ対策について、Pythonの主なセキュリティ対策として紹介します。

主なセキュリティ対策は、システムの最新版を保つ、低権限のユーザーアプリを使用する、アプリをリバースプロキシする、コンテナ分離する、この4つについてお話します。

Pythonのセキュリティ対策1:システムを最新版に保つ

一般的なソフトウェアやPythonでプログラムしたソフトウェアやツールにも言えることですが、時の経過から脆弱性が見つかる場合があります。脆弱性のことをセキュリティホールともいわれますが、その脆弱性を修正するプログラムがシステム更新という形で補われます。

pythonにはバージョン2や3という種類があります。新たに始める場合は最新版のバージョンを使用し脆弱性が改善されている方を選びましょう。

Pythonのセキュリティ対策2:低権限のユーザーでアプリを実行する

アプリをPythonでコンポーネントする場合はアクセス権限を制限してアプリを実行できるよう設定しましょう。アプリの開発に使用されるサードパーティ製のコンポーネントは安全性の低い場合があるためです。

Pythonの脆弱性の主なタイプはSQLインジェクション、XSS、CSRF、LDAP、コマンドインジェクション、XPATHIなどです。セキュリティ対策として権限を多く与えないよう設定しましょう。

Pythonのセキュリティ対策3:アプリをリバースプロキシする

アプリをリバースプロキシすると、サーバーを公開せず機密情報を守ることができます。またサーバー上の通信制限をかけることが可能です。

ネットワーク上でフィルタリングや認証セキュリティをすると、直接内部ネットワークが露出していないため影響を受けにくい仕組みにすることができます。

Pythonのセキュリティ対策4:コンテナ分離する

コンテナとは、アプリケーションの動作に必要なライブラリなどをなるべく小さい単位で一つにまとめた単位のことです。運用管理がスムーズでコンテナ技術を使用するとOSやディレクトリやIPアドレスなどシステムを占有しているように使えます。

コンテナ分離をしていると、問題の原因となっている場所(リポジトリ)から必要なコンテナを出してアプリケーションの障害解析が速やかにできます。

Python内にある脆弱性のタイプ6つ

pythonのプログラミングで脆弱性が発生しやすい部分は、アプリケーションの開発にサードパーティ製のコンポーネントを使用した場合です。

脆弱性がある場合のリスクの高い6つのタイプについてお話します。

Python内にある脆弱性のタイプ1: クロスサイト・リクエスト・フォージェリー

Webアプリケーションの脆弱性を利用した攻撃用Webページへユーザーがアクセスするよう誘導する危険性があります。

アクセスすると攻撃用サイトに用意されていた不正なリクエストがサーバーに送られ特定の処理が行われてしまうことがあります。

別のアカウント情報を使用したハッキングやロギング(情報を時系列に記録や蓄積すること)をします。クロスサイト・リクエスト・フォージェリーはCSRFと略省で呼ばれることがあります。

Python内にある脆弱性のタイプ2: クロスサイトスクリプティング

略称はXSSといいます。アプリケーション上で、標的サイトの脆弱性に対して攻撃する手法で、攻撃者は入力内容にスクリプト付のリンクを張り罠を仕掛けたりします。

リンクをクリックすると問題のある別のサイトを表示し、脆弱性を利用した通信を実行し偽の個人情報の入力フォーム表示などをして情報搾取をします。コンピューター上のCookie等、取得可能な情報を抜き、情報漏洩の原因になることが考えられます。

Python内にある脆弱性のタイプ3: LDAP インジェクション

LDAPはLightweight Directory Access Protocol の略称です。LDAPは検索クエリに対してシステム管理者が自由に追記や変更できるデータベース機能です。

脆弱性をねらった攻撃手法は、アクセスするLDAPクエリを使って不正に文字に書き換え(インジェクション)し悪意のある動作に誘導します。

攻撃側はLDAPの通信規格を悪意のある行動に変更できてしまうということです。

Python内にある脆弱性のタイプ4: SQLインジェクション

略してSQLIと言います。攻撃者がアプリケーションの脆弱性を利用し、想定しないSQLを実行させることです。別名はSQL注入と呼ばれています。

複数のSQLI攻撃があるとデータの破壊や書換えやデータベースを永続的に格納することで情報を漏洩させる恐れがあります。

SQLIに加えた不適切な認証(インバンドSQLインジェクション)、DDos攻撃、DNSハイジャック、XSSの4つの攻撃もあります。

Python内にある脆弱性のタイプ5:XPATHI

XML Path Languageの略称です。XML形式の文書から特定の要素を抽出する言語でHTML言語に対応しています。そのためWebサイトから情報を抽出(Webスクレイピング)する特徴があります。

攻撃者が対象となるWebサイトにデータをおくりXMLデータの構造を調べ、通常はアクセス権限のない保護されたデータへアクセスする恐れがあります。

Python内にある脆弱性のタイプ6:コマンドインジェクション

別名OSコマンドインジェクションと呼ばれます。OSが指令を受けて管理権限をもつユーザーIDやパスワード管理、アクセス権の実行処理を適切に行います。

指令のプログラム言語のコードの取扱いが不適切の場合、悪意のある攻撃者が悪用して不正にコマンド処理を実行させ権限を乗っ取る恐れがあります。

本来閲覧権限のあるデータを盗み見られる、管理者権限を奪う、情報漏洩や情報の書き換え、ウィルス感染の危険性があります。

Pythonの脆弱性を把握しセキュリティ対策しよう!

Pythonの特徴や使用するメリットと汎用性の高さの弱点と言える脆弱性についてお伝えしました。安全な環境を構築し脆弱性から予想される脅威に対して回避できるようにセキュリティ対策をしましょう。