2019年春 情報処理安全確保支援士試験の予想 | 乖離のぶろぐ(*´∀`)吸い込んで応援

https://codezine.jp/article/detail/11348

>IPA、「基本情報技術者試験」の出題を見直し、COBOL廃止、Python追加、プログラミング能力・理数能力など重視
>2019/01/24 16:05

 

(゚ω゚)パイソンってなに?

https://www.python.jp/pages/about.html

>もし、その環境でCコンパイラが利用できるのであれば、おそらくPythonが動作するでしょう

https://docs.python.jp/3/using/cmdline.html

>もちろん、もっとも一般的な利用方法は、単純にスクリプトを起動することです:
>python myscript.py

 

(゚ω゚)Perlに似てる言語だった。

(゚ω゚)パイソンの脆弱性を調べてみた。

https://postd.cc/a-bite-of-python/

>Pythonに咬まれるな : 注意すべきセキュリティリスクのリスト
標準入力から読み込んだものが即座にPythonコードとして評価される。
モジュールインジェクション : 対策は、モジュールファイルとそのディレクトリへの書き込み権限は管理者だけに与える
モンキーパッチ :  対策は、インポートするPythonモジュールの信頼性と整合性を確かめる

https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%82%AD%E3%83%BC%E3%83%91%E3%83%83%E3%83%81

>モンキーパッチは、オリジナルのソースコードを変更することなく、実行時に動的言語(例えばSmalltalk, JavaScript, Objective-C, Ruby, Perl, Python, Groovy, など)のコードを拡張したり、変更したりする方法である。

 

https://www.jpcert.or.jp/wr/2015/wr153801.html#5

【5】Windows 版 Python に任意の DLL 読み込みに関する脆弱性
Windows 版 Python には、実行の際に特定の DLL ファイルを読み込む脆弱性があります。

結果として、遠隔の第三者が、readline.pyd という名の DLLファイルを作成することで、任意のコードを実行する可能性があります。
対象となる製品は以下の通りです。
- Windows 版 Python

2015年10月5日現在、対策済みのバージョンは公開されていません。以下の回避策を適用することで、本脆弱性の影響を軽減することが可能です。
- python.exe を実行する際、カレントディレクトリ内に readline.pyd という名の DLL ファイルが存在しないことを確認する

詳細は、開発者や配布元が提供する情報を参照してください。

 

 

https://jvndb.jvn.jp/search/index.php?mode=_vulnerability_search_IA_VulnSearch&lang=ja&keyword=Python&useSynonym=1&vendor=&product=&datePublicFromYear=&datePublicFromMonth=&datePublicToYear=&datePublicToMonth=&dateLastPublishedFromYear=&dateLastPublishedFromMonth=&dateLastPublishedToYear=&dateLastPublishedToMonth=&severity%5B%5D=01&cwe=&searchProductId=
>検索キーワード: Python
>深刻度(CVSSv2):危険:(7.0~10.0)

https://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-004528.html

CPython の zipimport.c の get_data 関数における整数オーバーフローの脆弱性
(゚ω゚)試験に出そうな脆弱性は整数オーバーフローかな?

 

https://docs.python.org/ja/3.8/search.html?q=%E8%84%86%E5%BC%B1

>脆弱 検索結果。

> 検索が完了し、 16 ページ見つけました。 

(゚ω゚) 読みごたえある結果が出た。

https://docs.python.org/ja/3.8/library/xml.html?highlight=%E8%84%86%E5%BC%B1

billion laughs攻撃
https://ja.wikipedia.org/wiki/Billion_laughs%E6%94%BB%E6%92%83

>攻撃例は10個のエンティティからなり、各エンティティは前のエンティティ10個からなる。最も大きなエンティティのインスタンスは最初のエンティティのコピー10億個になる。

> 消費される主記憶容量はXMLをパースしているプロセスが利用できる量を超える

 

https://docs.python.org/ja/3.8/library/crypt.html?highlight=%E8%84%86%E5%BC%B1

crypt --- Unix パスワードをチェックするための関数

 

https://docs.python.org/ja/3.8/library/hmac.html?highlight=%E8%84%86%E5%BC%B1

>hmac --- メッセージ認証のための鍵付きハッシュ化

>警告:hexdigest() の出力結果と外部から供給されたダイジェストを検証ルーチン内で比較しようとするのであれば、タイミング攻撃への脆弱性を減らすために、 == 演算子ではなく compare_digest() を使うことをお奨めします。 https://dictionary.goo.ne.jp/jn/289419/meaning/m0u/

>タイミング‐こうげき【タイミング攻撃】の意味。
>《timing attack》サイドチャネル攻撃の一種。コンピューターが暗号化や復号処理に要する時間を測定し、その差からパスワードの文字列を解析するもの。

 

https://docs.python.org/ja/3.8/library/sqlite3.html?highlight=%E8%84%86%E5%BC%B1

SQL インジェクション攻撃の対策
>DB-API のパラメータ割り当てを使います。 ? を変数の値を使いたいところに埋めておきます。

    t = ('RHAT',)
    c.execute('SELECT * FROM stocks WHERE symbol=?', t)
    print(c.fetchone())

https://qiita.com/yoichi22/items/56cc3d8e243e137a254c

>MySQL-python でパラメータの自動エスケープ
>誤:cursor.execute("select * from person where name='%s'" % name)
>正:cursor.execute("select * from person where name=%s", name)

 

https://docs.python.org/ja/3.8/library/subprocess.html?highlight=%E8%84%86%E5%BC%B1

シェルインジェクション の脆弱性に対処するための、すべての空白やメタ文字の適切なクオートの保証はアプリケーションの責任になります。
>shell=True を使用するときは、シェルコマンドで使用される文字列の空白やメタ文字は shlex.quote() 関数を使うと正しくエスケープできます。

https://docs.python.org/ja/3.8/library/shlex.html#shlex.quote

lubuntu@lubuntu-VirtualBox:~$ ls -l 'somefile; echo aaa'
ls: 'somefile; echo aaa' にアクセスできません: そのようなファイルやディレクトリはありません
lubuntu@lubuntu-VirtualBox:~$

(゚ω゚) Lubuntuではアポストロフィで囲むとファイル名として扱われた。

(゚ω゚) shlex.quote() 関数で変換するとecho aaaが実行されず、攻撃は失敗。

 

(゚ω゚)これ以降は、古いバージョンの脆弱

https://docs.python.org/ja/3.6/library/asyncio-eventloop.html?highlight=%E8%84%86%E5%BC%B1
>18.5.1.6. コネクションの作成
>server_hostname が空の場合、ホスト名のマッチングは無効になります (深刻なセキュリティリスクになり、中間者攻撃に対する脆弱性になります)。

(゚ω゚) これだけが、意味不明。

 

https://docs.python.org/ja/2.7/library/os.html?highlight=%E8%84%86%E5%BC%B1

>警告:tempnam() を使うと、 symlink 攻撃に対して脆弱になります ; 代りに tmpfile() (ファイルオブジェクトの生成) を使うよう検討してください。

https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c802.html

シンボリックリンク攻撃

>いわゆる「シンボリックリンク攻撃」は、プログラムによるファイルへのアクセスに先回りしてシンボリックリンクを設定することによって、プログラムがオープンしようとするパス名の実体をシンボリックリンクにすり替えておき、想定外のファイルへのアクセスを起こさせる攻撃である。

>特に、高い権限で動作するプログラムがアクセスするファイルがシンボリックリンクにすり替えられると、システムの重要なファイルが改ざんされたり破壊されるおそれがある

>(1) シンボリックリンクを受け入れないようにする場合

>プログラムからファイルをオープンする場合、シンボリックリンクを受け入れないようにするにためは、ファイルオープンの前にシステムコール lstat() によりチェックすることができる。

>コード例 pathnameがシンボリックリンクか否か調べる
 1 #include <sys/stat.h>
 2 
 3    ...
 4    struct stat lstat_result;
 5    int err;
 6
 7    if (lstat(pathname, &lstat_result) != 0)
 8       return ERROR;  // lstat()失敗
 9
10    if ((lstat_result.st_mode & S_IFMT) == S_IFLNK) {
11       // pathname はシンボリックリンクである
12       ...
13    }
14    ...

 

(゚ω゚)パイソンの特徴。

https://docs.python.org/ja/3.8/tutorial/venv.html

仮想環境とは、特定のバージョンの Python と幾つかの追加パッケージを含んだ Python インストールを構成するディレクトリです。