長くて覚えやすくて複雑なパスワードとemojiの話

 長くて覚えやすくて複雑なパスワードとemojiの話

すみだセキュリティ勉強会2018その1での発表資料です。
http://ozuma.sakura.ne.jp/sumida/2018/03/22/38/

4eeccc07c0e1f28ab5bd6a5a6621b1a7?s=128

Yusuke OSUMI

April 30, 2018
Tweet

Transcript

  1. 18.

    18

  2. 19.

    19

  3. 39.

    hydraでWordPress管理画面にログイン試行 39 # hydra -l beer -P pass.lst 192.168.2.67 http-post-form

    ¥ "/wordpress/wp-login.php:log=^USER^&pwd=^PASS^:login_error" •ログインエラー時にlogin_errorが出るの でそれを拾う •ユーザ名 beer は分かっているものとする •pass.lstファイルに絵文字パスワードを入れて おく
  4. 46.

    john the Ripper...の前におさらい 46 osumi:$6$tyRfXiDr$.Ygm5rlb0Pw8PPkkiVAOyZ40CQ3R Q9INbAMwEizuOZlcez1Q/LZwSU7yHK4Nt8UsfPw/bQ PiUghsvCkAyeDQa/:17607:0:99999:7::: $ python -c

    'import crypt; print crypt.crypt("お はよー☺", "$6$tyRfXiDr$”)’ $6$tyRfXiDr$.Ygm5rlb0Pw8PPkkiVAOyZ40CQ3R Q9INbAMwEizuOZlcez1Q/LZwSU7yHK4Nt8Usf Pw/bQPiUghsvCkAyeDQa/ 一致した
  5. 47.

    John the Ripperのつかいかた1 47 # unshadow passwd shadow > passwd.db

    # cat passwd.db root:$6$mO0Bqohl$Z03.tTtOUumg7UXfQ43u0JxLtkna OyM6YrteTa9sfdJltfZhYcqlkOV43.1Zfvq0fHX.FYNypaoZ qDlkQQ3yT0:0:0:root:/root:/bin/bash ....(省略).... osumi:$6$tyRfXiDr$.Ygm5rlb0Pw8PPkkiVAOyZ40CQ3R Q9INbAMwEizuOZlcez1Q/LZwSU7yHK4Nt8UsfPw/bQ PiUghsvCkAyeDQa/:1001:1001::/home/osumi:/bin/bas h ....(省略).... unshadowして/etc/passwdとshadowを結合
  6. 48.

    John the Ripperのつかいかた2 48 # cat p.lst password 1234567890 キャハがんばろ〜

    pa$$word おはよー☺ PA$SWORD パスワードファイル(p.lst)を用意
  7. 53.

    Unicodeのcode point 53 墨 U+58A8 UTF-8 0xE5A2A8 UTF-16LE 0xA858 UTF-16BE

    0x58A8 UTF-32BE 0x000058A8 code point(文字コード表の位置)は、U+58A8 LE: リトルエンディアン BE: ビッグエンディアン
  8. 54.

    Unicodeのcode point 54 a U+0061 UTF-8 0x61 UTF-16LE 0x6100 UTF-16BE

    0x0061 UTF-32BE 0x00000061 code point(文字コード表の位置)は、U+0061
  9. 55.

    Unicodeのcode point 55 U+1F62D UTF-8 0xF09F98AD UTF-16LE 0x3DD82DDE UTF-16BE 0xD83DDE2D

    UTF-32BE 0x0001F62D code point(文字コード表の位置)は、U+1F62D Loudly Crying Face ※面1(SMP)の文字
  10. 56.

    Unicodeの群、面 •基本多言語面(BMP: Basic Multilingual Plane) • 面0(ゼロ)と呼ばれる • code pointは16進4ケタとなる(例:U+58A8)

    •補助多言語面(SMP: Supplementary Multilingual Plane) • 面1と呼ばれる • codepointは16進5ケタ、先頭は1となる(例:U+1F62D) • 面の上位に「群」もあるが、群0しか使われない 56 ※UTF-8などはいったん忘れて、code point(規格での文字表 の位置)だけ考える
  11. 57.

    BMP面の文字 57 群 0 (Unicodeでは常にゼロ) 面 0 (BMP) 墨 U+58A8

    ※一般的な文字はほぼBMPに入っている
  12. 59.
  13. 61.
  14. 62.

    UTF-8の特徴 •8bitを単位とし、code pointに独自演算をほどこし てコード値を生成する • どう計算するか話すと長いので省略 •ASCIIコードとの互換性が最大の魅力 • ASCII文字しかない文書は、ASCIIでもUTF-8でも全く同じ バイト列になる

    •ASCIIは1バイト、日本語や絵文字などは3〜4バイ トとなる可変長 • BMPは3バイト、面0以外のSMPなどは4バイト •2018年現在、ファイルやWebアプリ入出力(外部 コード)はほぼUTF-8で統一されている 62
  15. 63.

    UTF-8のセキュリティ問題 63 1つのcode pointに対して、複数のコード値が存在する / U+002F UTF-8 0x2F 0xC0AF (規格上は不正)

    0xE080AF (〃) 0xF08080AF (〃) 本当は怖い文字コードの話 第4回 UTF-8の冗長なエンコード http://gihyo.jp/admin/serial/01/charcode/0004 文字をビット比較して「0x2F禁止」など安易に書くと、 ディレクトリトラバーサルの脆弱性を引き起こす
  16. 64.
  17. 65.

    UTF-16の特徴 •16ビットを単位とし、歴史的にはもっとも正統(?)な 表現 • JavaやWindowsの内部コードとして利用されていることで 有名 •BMP(面0)では、code pointとコード値が一致する •SMPなど面0以外を扱うために魔改造がほどこされ、 とても分かりにくい[要出典]

    • サロゲートペアの利用 •エンディアンを明示するため、データの先頭にバイ ト順マーク(Byte Order Mark; BOM)が利用される • ビッグエンディアン:U+FEFF • リトルエンディアン:U+FFFE 65
  18. 66.

    UTF-16のサロゲートペア 66 U+1F62D UTF-16BE 0xD83DDE2D code point(文字コード表の位置)は、U+1F62D Loudly Crying Face

    U+D800〜U+DBFF:上位サロゲート U+DC00〜U+DFFF:下位サロゲート 結合文字(Aと^でâなど)との 混同に注意
  19. 67.

    Javaの内部コードはUTF-16 67 String str = "あいうえお"; for (char c :

    str.toCharArray()) { System.out.println(c + " => 0x" + Integer.toHexString(c)); } UTF-8でソースコードを書いて実行しても あ => 0x3042 い => 0x3044 う => 0x3046 え => 0x3048 お => 0x304a UTF-16のバイト列が得られる
  20. 68.
  21. 75.

    参考文献 • プログラマのための文字コード技術入門,矢野 啓介, 技術評論社 • 楽しい文字コード入門 知っておきたいUnicode Emoji編 •

    https://speakerdeck.com/todokr/le-siiwen-zi-kodoru-men-zhi- tuteokitaiunicode-emojibian • 本当は怖い文字コードの話 第4回 UTF-8の冗長なエンコード • http://gihyo.jp/admin/serial/01/charcode/0004 75