ニュース
Redmineでwikiの生データを抽出する
wikiの加工前(MarkDown記法そのまま)のデータを取得するシェルスクリプトを書きました。
別の環境に移行する時や、うっかりwikiだけ消してしまった時の復旧などに便利。
実行するとカレントディレクトリにwiki毎にテキストファイルを吐くので、実行する場所は注意してください。wikiの記事数によるけど、いっぱいファイルが吐かれるよ!
詳細は、ALMinium を参照。
Let's Encrypt で無料SSL証明書を取得してみた
ServersManのCentOS7で、Let's Encryptを利用して、無料SSL証明書を取得してみました。
詳細はServersManを参照。
これだとオレオレ証明書と違って、ブラウザで警告がでません!
katagaitai CTF勉強会 - 関東|hard に参加してきました (2コメント)
場所は前回と同じ、人員の許容量が宇宙ヤバい秋葉原UDXで開催
午前の部 trmrさん¶
共通鍵暗号であるAESの内部をとてもわかりやすく説明してくれました。
AESは、フタを開けてみると、わかりやすい構造になってました。
今までブラックボックスとしか見ていなかったので、とても勉強になりました!!
しかし演習問題として解説してくれた [Ghost in the shellcode CTF 2013] Q20 - Subme の難易度の高さに笑った。
あんなん難しすぎるやろwww
ちなみに、以下が唯一のwriteupだそうです。
MSLC - Gits ctf 2013 Crypto 500
子育てお疲れ様です。
午後の部 bataさん¶
ほぼ4時間しゃべりっぱなしのbataさんお疲れ様でした。
初体験、ARMアーキテクチャのアセンブラを読む!ですが、exploitの基本的な原理はx86となんら変わらないので、話にはついていけましたよ!(解けるとは言っていない)
デバック環境の構築だけでもかなり有用でした。素敵な知見が沢山得られました。
特に、telnetを経由してバイナリを送り込んで、リモートで実行する一連の流れを自動化している実演を見たときは、感動致しました。
美しいですな~。
解法その2の方は、意味は解るんだけど、自力でそこに到達できる気がしなかったw
トップレベルの人はすごい事思いつくのね。。
おまけ¶
後援のNRIセキュアテクノロジーズさんから、謎の暗号が書いてあるハッカ飴を頂きました!
ありがとうございます。(ハッカーとハッカをかけたんですね)
暗号すごい気になるけど、場阿忍愚CTF中なので、ちょっとガマンしよう。。
裏面は、前回頂いたコースターと同じ感じかな?
SECCON 2015 Writeup
CTF Writeup SECCON 2015¶
結果&感想¶
今回、チームsky3は、某チームに合流してSECCON2015に参加しました。
楽しかったです!!
ある程度人数がいると、閃きと気づきの総数が増えるので、単独では解けなかった問題が、チームの皆さんの手により、あれよあれよという間に解かれていきました。
あと相変わらず、メンバーの c@tさん, リリりん♪さんは、スゴかったです。
チーム名公表していいかわからないので、とりあえず伏せておきますが、ランキングは出場チーム上位3%に入っていることを申し添えておきます。
いちおう300点分獲得できたので、その問題について、writeup書きました。
チームメンバが解いた問題のwriteupも、了解が取れれば合わせて公開するやも。
Individual Elebin¶
問題
すべてのELFファイルを実行せよ
Individual_Elebin.zip
中身は、1.bin … 11.bin が入っている。
とりあえず定番のfileコマンド
$ file ./* ./1.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), statically linked, stripped ./10.bin: ELF 32-bit LSB executable, ARM, version 1, statically linked, stripped ./11.bin: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped ./2.bin: ELF 32-bit MSB executable, MC68HC11, version 1 (SYSV), statically linked, stripped ./3.bin: ELF 32-bit LSB executable, NEC v850, version 1 (SYSV), statically linked, stripped ./4.bin: ELF 32-bit MSB executable, Renesas M32R, version 1 (SYSV), statically linked, stripped ./5.bin: ELF 64-bit MSB executable, Renesas SH, version 1 (SYSV), statically linked, stripped ./6.bin: ELF 32-bit MSB executable, SPARC, version 1 (SYSV), statically linked, stripped ./7.bin: ELF 32-bit LSB executable, Motorola RCE, version 1 (SYSV), statically linked, stripped ./8.bin: ELF 32-bit LSB executable, Axis cris, version 1 (SYSV), statically linked, stripped ./9.bin: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, stripped
どう見ても、CPUアーキテクチャ別のELFファイルです。本当にありがとうございました。
・・・がんばって実行するぞ!!
実行するための方法¶
以下の4つの方法で実行します。
そのまま普通に実行¶
1.bin だけは x86 なのでそのまま実行できますね。
$ ./1.bin SECCON{AaA
クロスコンパイル環境 gdb を使う¶
自分のPCのCPUアーキテクチャ以外は、クロスコンパイル環境を使って実行するのがよいでしょう。
ただし、1からコンパイルを始めると競技時間内に終わりません。
予め、コンパイル済みの環境を準備しておくしかありません。
そこで!!!1
kozosの坂井さんの力をお借りします。
cross-gcc4-20130826.zip をインストール済みのCentOS6.5イメージ (OVAフォーマット)
FreeBSDのVirtualBox用イメージを,OVAフォーマットにしたもの
ここの仮想環境を使わせて頂きます。
ちなみに坂井さんの著作はバイナリアン必見の良書揃いです!
ももいろテクノロジー 各種アーキテクチャのクロスコンパイラ環境を構築するも大変参考になります。
さて、坂井さんのCentOS6.5を起動して、クロスコンパイルの環境を確認してみます。
$ pwd /usr/local/cross-gcc4/bin $ ls *gdb arm-elf-gdb cris-elf-gdb m32c-elf-gdb mips16-elf-gdb powerpc-elf-gdb sh64-elf-gdb v850-elf-gdb avr-elf-gdb frv-elf-gdb m32r-elf-gdb mips-elf-gdb rl78-elf-gdb sh-elf-gdb bfin-elf-gdb h8300-elf-gdb microblaze-elf-gdb mn10300-elf-gdb rx-elf-gdb sparc-elf-gdb
いろんなCPU用に用意されているのがわかります。
CPUアーキテクチャの違うバイナリでも、staticリンクのバイナリであれば、各CPUアーキテクチャ用のgdbで実行できます。
gdb起動後は、
target sim load run
の順に入力して実行します。
$ ./arm-elf-gdb /tmp/Individual_Elebin/10.bin GNU gdb (GDB) 7.5.1 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-elf". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /tmp/Individual_Elebin/10.bin...(no debugging symbols found)...done. (gdb) target sim Connected to the simulator. (gdb) load Loading section .text, size 0x848 vma 0x1400 Loading section .rodata, size 0xe4 vma 0x1c48 Loading section .data, size 0x4 vma 0x2000 Start address 0x1400 Transfer rate: 18816 bits in <1 sec. (gdb) run Starting program: /tmp/Individual_Elebin/10.bin 8a0d28f[Inferior 1 (process 42000) exited normally] (gdb) quit
ちょっと判りにくいかもしれませんが、8a0d28f が表示されてます。
クロスコンパイル環境 run を使う¶
ぶっちゃけ、実行だけならgdbより、こっちの方が楽です。
$ pwd /usr/local/cross-gcc4/bin $ ls *run arm-elf-run cr16-elf-run h8300-elf-run microblaze-elf-run mn10300-elf-run rx-elf-run sparc-elf-run avr-elf-run cris-elf-run m32c-elf-run mips16-elf-run powerpc-elf-run sh64-elf-run v850-elf-run bfin-elf-run frv-elf-run m32r-elf-run mips-elf-run rl78-elf-run sh-elf-run
$ ./v850-elf-run /tmp/Individual_Elebin/3.bin i $ ./m32r-elf-run /tmp/Individual_Elebin/4.bin N $ ./sh64-elf-run /tmp/Individual_Elebin/5.bin 12345678 $ ./sparc-elf-run /tmp/Individual_Elebin/6.bin 90abcdef $ ./cris-elf-run /tmp/Individual_Elebin/8.bin AW $ ./avr-elf-run /tmp/Individual_Elebin/9.bin 3a5d37a3 $ ./arm-elf-run /tmp/Individual_Elebin/10.bin 8a0d28f $ ./mips16-elf-run /tmp/Individual_Elebin/11.bin aAq}
2.bin と 7.binが実行できずに残ってしまいましたが、坂井さんが提供してくださっているFreeBSDの方に該当のCPUアーキテクチャのクロスコンパイル環境が入っています。
$ ./m6811-elf-run /tmp/Individual_Elebin/2.bin B $ ./mcore-elf-run /tmp/Individual_Elebin/7.bin BDFHJLNP
qemuを使う¶
qemuを使う方法もあります。
Ubuntu とか Debian とか Kali Linux で、以下実施してqemuインストール
# apt-get install qemu-user-static
/usr/bin 配下に qemu-[CPU arch]-static が出来るので、それを実行する。
例はこんな感じ。cpuのチップセット(?)を指定するのがコツ。
# ./qemu-cris-static -cpu help /tmp/Individual_Elebin/8.bin Available CPUs: crisv8 crisv9 crisv10 crisv11 crisv32 # ./qemu-cris-static -cpu crisv8 /tmp/Individual_Elebin/8.bin AW
答え¶
実行結果を全部くっつけるとフラグになります。
1.bin SECCON{AaA 2.bin B 3.bin i 4.bin N 5.bin 12345678 6.bin 90abcdef 7.bin BDFHJLNP 8.bin AW 9.bin 3a5d37a3 10.bin 8a0d28f 11.bin aAq}
SECCON{AaABiN1234567890abcdefBDFHJLNPAW3a5d37a38a0d28faAq}
Steganography2¶
問題
ファイルからflagをさがせ.
sunrise.zip
中身は、sunrize.pngという画像
まず、バイナリエディタでゆるーく見てみましょう!
ファイルの終端付近に、様子の変な領域が見えますね。
png画像の終端を表す 00 00 00 00 49 45 4E 44 AE 42 60 82 "IENDョB`" が見えるので、当然この変な領域も画像として出力されていなければいけないはずですが、画像に変な箇所は見られませんでした。綺麗な朝日です。
それで、「あ、実際の画像サイズより小さくなってるんじゃね?」と思いついて調べてみました。
pngの画像サイズは、イメージヘッダ(Image header、IHDR)という場所に書かれています。
参考:イメージヘッダ(Image header、IHDR)
http://www.setsuki.com/hsp/ext/chunk/IHDR.htm
具体的には、"IHDR"という文字が書かれた後4Byteが画像の幅を表し、その更に後の4byteが画像の高さを表しています。
画像の高さを修正したいので、00 00 0F C0 の所の数を適当に増やしてみます。
画像の下部にフラグが出てきました。
文字コードのカオスな世界を整理してみた
文字コード¶
なんか仕事でやりそうだったので、この際カオスだった文字コード云々を整理してみる。
概要¶
文字セットと符号化方式¶
まず、文字セット(文字集合)と符号化方式という概念を理解することが必要。
文字セットとは¶
アルファベットや記号はもちろん、漢字やひらがな、ハングルやヘブライ文字など、世界中で使われている文字を集めたもの。
Unicodeは文字集合です。
Unicodeは便宜上、Unicodeスカラ値(16進数にU+をつけて U+0000~U+20FFFF で表現)という値で文字を管理しています。
Unicodeスカラ値はコードポイントという呼ばれ方をすることもあります。厳密には意味が違いますが、ここでは同じものだと思っておけば大過ありません。
符号化方式とは¶
文字セットで定義されている一つ一つの文字を、どのように符号化するかという文字符号化方式(エンコーディング)です。
Unicodeという一つの文字集合に対して、異なる文字符号化方式UTF-8、UTF-16が存在し、符号化した結果も異なります。
UTF-8とUTF-16の符号化方式の実装例¶
Unicodeスカラ値 | 文字 | 説明 | UTF-8 | UTF-16 |
---|---|---|---|---|
U+0041 | A | ラテン文字 | 41 | 0041 |
U+0061 | a | ラテン文字 | 61 | 0061 |
U+00E8 | è | ラテン文字 | C3 A8 | 00E8 |
U+042F | Я | キリル文字(ロシア) | D0 AF | 042F |
U+05D0 | א | ヘブライ文字 | D7 90 | 05D0 |
U+0905 | अ | デーヴァナーガリ文字 | E0 A4 85 | 0905 |
U+0E04 | ค | タイ文字 | E0 B8 84 | 0E04 |
U+2162 | Ⅲ | ローマ数字 | E2 85 A2 | 2162 |
U+3042 | あ | ひらがな | E3 81 82 | 3042 |
U+4E9C | 亜 | 漢字(あ) | E4 BA 9C | 4E9C |
U+D558 | 하 | ハングル | ED 95 98 | D558 |
U+103A0 | 𐎠*1 | 楔形文字 | F0 90 8E A0 | D800 DFA0 |
U+2000B | 𠀋 | 漢字(じょう) | F0 A0 80 8B | D840 DC0B |
U+20BB7 | 𠮷 | 漢字(よし) | F0 A0 AE B7 | D842 DFB7 |
U+29E3D | 𩸽 | 漢字(ほっけ) | F0 A9 B8 BD | D867 DE3D |
*1…現状どのブラウザでも表示できないっぽい。フォントが用意されていないのかも?
文字セットと符号化方式の関係¶
ここ超重要。
┏文字セット(JIS) ━━━━━━━━━━┓ ┏文字セット(Unicode) ━━━━━━━━┓ ┃ ┃ ┃ ┃ ┃┌JIS X 0213(JIS2004) ──────┐┃ ┃┌UCS4──────────────┐┃ ┃│ 第三水準 │┃ ┃│ 4byteで表現できる文字の範囲 │┃ ┃│ 第四水準 │┃ どんな文字を ┃│ │┃ ┃│ +10文字 │┃ 取り込むか ┃│ │┃ ┃│ │┃ インプットに ┃│ │┃ ┃│┌JIS X 208(JIS90)─┐ │┃ なってる ┃│┌UCS2───────┐ │┃ ┃││ 第一水準 │ │┃ →→→→→→ ┃││2byteで表現できる │ │┃ ┃││ 第二水準 │ │┃ ┃││文字の範囲 │ │┃ ┃││ │ │┃ ┃││ │ │┃ ┃│└─────────┘ │┃ ┃│└─────────┘ │┃ ┃└────────────────┘┃ ┃└────────────────┘┃ ┃ ┃ ┃ ┃ ┃ ※文字毎にJISコードっていう番号が ┃ ┃ ※文字毎にUnicodeスカラ値っていう ┃ ┃ 振られているけど、現在ではあまり ┃ ┃ 番号が振られているけど、そのまま ┃ ┃ 使われない。 ┃ ┃ 使わない。 ┃ ┗━━━━━━━━━━━━━━━━━━┛ ┗━━━━━━━━━━━━━━━━━━┛ ↓JISコードを1bitシフト ↓JISコードに0x8080を加算 ↓スカラ値をなんか ↓スカラ値をなんか ↓ ↓ ↓いい感じに計算 ↓いい感じに計算 ┌Shift JIS ──┐┌EUC ─────┐ ┌UTF-16───────┐┌UTF-8 ───────┐ │JIS X 208まで ││ │ │基本 2byte││ASCII 1byte│ └───────┘└───────┘ │サロゲート文字 4byte││ギリシャ文字等 2byte│ ↓ └──────────┘│ほとんどの漢字 3byte│ ↓Microsoftが独自拡張 │JIS X 0213相当 4byte│ ↓ └──────────┘ ┌CP932 ────────────┐ │拡張文字が詰め込まれている │ │ - JIS X 0201(半角カナ) │ │ - NEC拡張文字(①とか) │ │ - IBM拡張文字 │ │ - NEC選定IBM拡張文字 │ │ │ │呼び方違うだけで同じものがある│ │MS932 ← Javaでの呼び方 │ │Windows-31J ← IANAでの呼び方 │ └───────────────┘
JIS X 0213(JIS2004)とUTF-16(サロゲート文字)とUTF-8(4Byte文字)の微妙な関係¶
UTF-16(サロゲート文字)¶
サロゲート文字に、JIS X 0213(JIS2004)の文字が、 だいたい 入っている。
ただ、2Byte範囲の方にも入っているので、完全に対応していない。
UTF-8(4Byte文字)¶
UTF-8(4Byte文字)に、JIS X 0213(JIS2004)の文字が、 だいたい 入っている。らしい。
(本当かどうか未確認)
みんなの混乱を招く、混同している所¶
Shift JIS と CP932の混同¶
- Windowsは、ANSIと呼んたりする。それCP932や。。
- CP932をShift JISと呼んでるソフトやOSがあるが、厳密には間違っている。
同じものなのに呼称が異なる¶
- CP932,MS932,Windows-31J 同じもんや・・・しかも、これらが Shift JISと混同される
UnicodeとUTF-16・UTF-8の混同¶
Unicodeは、文字セットであり、文字コードでは無いが、一部のソフトやOSで混同している。
- Windowsでは、Unicodeと言えば、UTF-16を指している
サロゲートペア・サロゲート文字の混同¶
本来は、UTF-16の2byte範囲で表現しきれない文字に対して、名付けられた名称である。
が、UTF-8の4Byte文字に対して、サロゲート文字と誤って呼ぶケースが多い。
EBCDIC+JEF¶
蛇足だが、レガシーシステムの文字コードはこんな感じ。
┌EBCDIC──┐ ┌JIS X 028(JIS90)──────────┐ │ASCIIとは │ │そのままのJISコード値を使うが、 │ │別の独自の│+│どこから漢字かが、判らないので │ │文字コード│ │KI:漢字イン │ │ │ │KO:漢字アウト │ │ │ │と呼ばれる制御コードで囲む必要がある│ └─────┘ └──────────────────┘
hidekatsu-izuno 日々の記録 - JEF4J をリリースしてみた。あるいは、メインフレームの文字コードの話。
http://hidekatsu-izuno.hatenablog.com/entry/2018/01/14/140124
UTF-8の4Byte文字(または、サロゲートペア)は、何が面倒なのか¶
UTF-8から、CP932(または、Shift JIS)への変換ができない¶
UTF-8の4Byteは、すべからくJISの第三水準・第四水準文字であるから、CP932(または、Shift JIS)には変換できない。
Windowsは「JIS第3・第4水準はUnicodeで対応する(Shift JISには追加しない)」というスタンスらしい。
DB保存ができない¶
MySQLもOracle Database同様にUTF-8で文字を保存できる。ところが、4Byte文字を想定していないために、4バイトとなる文字を格納できない。
プログラミングが面倒¶
byteとして扱った瞬間から、文字数のカウントやら、どれがサロゲート文字なのか判定が必要やら、考慮しなきゃいけないことが増えまくる。
容量の見積もりが面倒¶
実際は、DBの容量見積もりとかも含めて、もっと大きなスケールになると思うけど。
100文字記録されるファイルが100個あるとするじゃん?
1文字2byteだったら、
2byte * 100文字 * 100ファイル ≒ 20kbyte じゃん?
でも、UTF-8だと、1文字1byte~4byteじゃん?
しょうがないから、最大値で見積もるじゃん?
4byte * 100文字 * 100ファイル ≒ 40kbyte で倍になるじゃん?
でも、サロゲート文字で埋め尽くされることは無いだろうから、容量の無駄じゃん?
「容量の無駄なんでちょっと減らしときますね^^」とか、お客さんに説明できないじゃん?
文字コードにおける諸所のトラブル原因¶
波ダッシュ問題¶
Unicodeの字形の登録ミスに起因して、以下の状態になっています。
波ダッシュ 〜
- WAVE DASH(ユニコードポイント : U+301C)
全角チルダ ~
- FULLWIDTH TILDE(ユニコードポイント : U+FF5E)
- Shift JIS には存在しない
同じ字形に見えますね。Windowsなどでは波ダッシュの代用として全角チルダが不適切に使われるので混乱の元となっています。Macで入力した"〜"とWindowsで入力した"~"は違うものとして扱われます。仮にパスワードや、パスワードを忘れた際の合言葉に使っていた場合「あれ~MacではログインできるのにWindowsではログインできないな~」ということになります。
寿司ビール問題¶
🍣🍺という文字を扱えないソフトウェアがあるという所から名付けられた問題です。UTF-8において、1文字4Byteの文字を考慮しないかったことに起因した不具合でした。最近は、この不具合を抱えたソフトウェアは少なくなりました。
Unicode/UTF-8のあまり知られていない仕様¶
サロゲートペア¶
まとめ中
𩸽
Unicode結合文字¶
橋本商会 - UTF-8-MACをUTF-8に変換する
http://shokai.org/blog/archives/5953
Unicode正規化 変換するワンライナー¶
Unicode正規化するシェル芸を作りました
python3で
echo -n "DQⅢ①⑳海海神神㌔㍉ビデブー" | python -c "import sys,unicodedata; print(unicodedata.normalize(\"NFKC\", sys.stdin.read()));"
DQIII120海海神神キロミリビデブー
perlで
echo -n "DQⅢ①⑳海海神神㌔㍉ビデブー" | perl -e "use strict;use utf8;use Encode;use Unicode::Normalize;binmode STDIN, ':encoding(UTF-8)';binmode STDOUT, ':encoding(UTF-8)';print Unicode::Normalize::NFKC(<STDIN>);"
DQIII120海海神神キロミリビデブー
検出する方法について¶
異字体セレクタ¶
まとめ中
Article¶
Qiita - 絵文字を支える技術の紹介
https://qiita.com/nonanona/items/b148c212ba7c24942e93
絵文字がある種のUnicodeバグを世界から一掃しつつある件について
https://note.mu/ruiu/n/nc9d93a45c2ec
書籍¶
たかが文字コード、されど文字コード/ShiftJISerへ贈る鎮魂歌
https://techbookfest.org/product/5677280795820032?productVariantID=5733665126481920
ユニコード戦記 ─文字符号の国際標準化バトル
https://amzn.to/3redEnc
[改訂新版]プログラマのための文字コード技術入門 WEB+DB PRESS plus
https://amzn.to/3KY0276
参考¶
Shapecatcher(手書きの文字からUnicodeを検索)
https://shapecatcher.com/#
(プログラマのための)いまさら聞けない標準規格の話
https://www.ogis-ri.co.jp/otc/hiroba/technical/program_standards/part1.html
ㇹ゚ン゚'ㇳ̃ヴ゙ニ゙コ゚ヮヰ文̂字̠コ゚−ト゚ノ゙ㇵナ゚ㇱ(現在に至るまでの文字コードの軌跡と簡単な使い方について)
https://heppoko.hatenadiary.jp/entry/2018/04/28/184559
ウナのIT資格一問一答 - 文字コードやフォント、その他PC関連の読み物です。
http://una.soragoto.net/topics/index.html
JISから迫る文字コード入門
https://speakerdeck.com/todokr/jiskarapo-ruwen-zi-kodoru-men
hidekatsu-izuno 日々の記録 - JEF4J をリリースしてみた。あるいは、メインフレームの文字コードの話。
http://hidekatsu-izuno.hatenablog.com/entry/2018/01/14/140124
長くて覚えやすくて複雑なパスワードとemojiの話
https://speakerdeck.com/ozuma/chang-kutejue-eyasukutefu-za-napasuwadotoemojifalsehua
Dive Into Python 3 第4章.文字列
http://diveintopython3-ja.rdy.jp/strings.html
C++標準化委員会、ついに文字とは何かを理解する: char8_t
https://qiita.com/yumetodo/items/54e1a8230dbf513ea85b
アプリの国際化の舞台裏
https://speakerdeck.com/niw/apurifalseguo-ji-hua-falsewu-tai-li
Unicodeで絶対知っておくべきセキュリティ5つの注意(翻訳)
https://techracho.bpsinc.jp/hachi8833/2017_11_28/48435
UTF-8の冗長なエンコード
https://gihyo.jp/admin/serial/01/charcode/0004#sec2
全ての開発者が知っておくべきUnicodeについての最低限の知識
https://gigazine.net/news/20231005-unicode/
絵文字を支える技術について
https://note.com/ttuusskk/n/n1bff5d8e638c
MobaXterm - 求めていたWindows用GNU環境がここにあった!!!1
Windowsでgrepしたいとか、シェルスクリプトでデータ編集したいとか、scp使いたいとか、sed使いたいとか、もぅあれやこれやが稀によくあった。
でも、cygwinを入れるという気にならなかった。portable版がないしね。ちょこっとGNUコマンド使いたいだけなんだけど。
MobaXtermが全てを解決してくれたんだ!!1
- 日常的に使いたいコマンドがほぼ全部最初入っている!シェルスクリプト組む時に、足りないコマンドが無い。
- それにしても軽い。
- portable版がある。20MBくらい。余裕で持ち運べる。
- SSHクライアントも入ってる。超便利。TeraTermの代わりになる。
- X Clientもできる。
- ちなみにmoshも入ってる。
素晴らしい。
MobaXterm
http://mobaxterm.mobatek.net/
Dentoo.LT#12を聴講させて頂きました
以前参加させて頂いたすみだセキュリティ勉強会2015#1でDentoo.LTというものの存在を知り、前々から興味があったので、聴講させて頂きました。
コレ好きィ!
とっても面白かった。いつか自分も発表したい!
色々なマニアックな話題の中にも、高度に技術的な話が織り込まれていて、いや、これ、ホントレベル高いと思っていながらも、ずっと笑ってました。
完飲。
あと、文字フリマのステッカー頂きました。ありがとうございます。
「ポートスキャンしたらsshが100個見えるようにしてみた」をやってみた
_人人人人人人人人人人_ > 突然の100個のssh <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
KippoBrinker¶
結論だけ見たい人は最後の「第7回 ハニーポッター技術交流会(2020/1/25)で得た知見」を見て~
先日、すみだセキュリティ勉強会2015#2に参加してきました
すみだセキュリティ勉強会2015#2
http://ozuma.sakura.ne.jp/sumida/2015/08/20152.html
ろば電子が詰まっている
http://d.hatena.ne.jp/ozuma/20150829/1440837066
その中で、以下の知見を得ることができました。
sshのポートをデフォルトの22/tcpから変えるべきか論争¶
- sshのポートは、やっぱり22/tcpから変えましょう
プリンタポート…具体的には9100/tcpから9107/tcpの8つのポートにするだけで隠れることができる
9100/tcpはプリンタが使うポートで、一部の機種ではここに送られたデータをそのまま印刷するという機能を持ちます。バージョン情報取得のため、nmapでスキャンをすると大量の印刷をしてしまうおそれがあるため、デフォルトでスキャン対象していない。ため。ポートスキャンをしても一発で分からないようにすればいい
ssh分身の術により、大量のsshを見せる
_人人人人人人人人人人_ > 突然の100個のssh <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
やってみた。
以下は、CentOS7で動作確認しています。
kippo¶
kippoとは¶
kippoとはsshっぽく振る舞うハニーポット
python(ver2系)製
kippoのインストール¶
必要なパッケージのインストール¶
# yum install python-devel
virtualenvによる仮想環境の作成(別に直でも問題ない)¶
virtualenvによる仮想環境を作ると、必要環境をユーザ環境にインストールできるようになる。
よく解らない人は、pythonを参照。
$ mkdir kippo $ virtualenv --no-site-packages kippo $ cd kippo $ source bin/activate (kippo)$
ちなみに仮想環境抜ける時は、以下ね。
(kippo)$ deactivate
必要パッケージのインストール&kippoセットアップ¶
仮想環境に必要パッケージをインストールする。
twistedは、最新バージョンだと動かないので注意。
起動時にFailed to load application: 'module' object has no attribute 'IPluggableAuthenticationModules'
というエラーが出る場合、どうやら Twisted のバージョンの問題らしい。15.2.0 を入れることで解決する。
(kippo)$ pip install twisted==15.2.0 (kippo)$ pip install PyCrypto (kippo)$ pip install pyasn1 (kippo)$ git clone https://github.com/desaster/kippo (kippo)$ cp -i kippo.cfg.dist kippo.cfg (kippo)$ ./start.sh
起動したら、セットアップ完了。動作を確認してみる。
$ ssh localhost -p 2222
root:123456でログインできる。
動作確認後¶
動作が確認できたら、以下をやっておこう。
停止
(kippo)$ sh ./stop.sh
root:123456でログインできないようにする。
(kippo)$ cd data (kippo)$ cp -pi userdb.txt userdb.txt.org (kippo)$ vi userdb.txt - root:0:123456 + [でたらめな文字列]:0:[でたらめな文字列]
kippoBrinkerSumida¶
概要¶
kippoは、通常は1つの環境しか立ち上げられない。
それを複数起動可能にするシェルスクリプトを作ってみた。
インストール&セットアップ¶
kippoインストール先に、以下のファイルを置く。
kippoBrinkerSumida.sh
kippoBrinkerStop.sh
実行権を付与する。
(kippo)$ chmod u+x kippoBrinkerSumida.sh (kippo)$ chmod u+x kippoBrinkerStop.sh
ダミーとして起動したいポート番号を指定する。
(kippo)$ vi kippoBrinkerSumida.sh - KIPPO_PORT_LIST="1020 1021 1022 1023 1024 1025" # ダミーsshdのポートリスト + KIPPO_PORT_LIST="任意のポート番号1 任意のポート番号2 任意のポート番号3..." # ダミーsshdのポートリスト
sshのバナーを合わせる。
自分のサーバのsshのバナーに合わせておかないと偽物だってバレちゃうので、自分のsshサーバのバナーを確認する。
$ telnet localhost 22 Trying ::1... Connected to localhost. Escape character is '^]'. SSH-2.0-OpenSSH_6.7
上の結果だと、SSH-2.0-OpenSSH_6.7 がそれ。
確認したらCtrl+cで抜ける。
確認結果を設定する。
(kippo)$ vi kippoBrinkerSumida.sh - SSH_VERSION_STRING="SSH-2.0-OpenSSH_6.6.1" + SSH_VERSION_STRING="SSH-2.0-OpenSSH_6.7"
このまま真似しないでね。みんなの環境とは、それぞれバージョンが違うはずだから。
起動¶
以下、実行するだけ。
(kippo)$ ./kippoBrinkerSumida.sh
起動完了後に、実際にsshっぽく見えるか確認してみよう。
$ telnet localhost [設定したポート番号]
ウェルノンポートを指定してダミーを起動したい場合¶
まず、前提としてkippoはユーザ権限で起動した方がいい。
万が一、kippoに脆弱性があった時に、root権限だったりすると死ぬ。
しかし、ユーザ権限ではウェルノンポート(0~1023のポート番号)をBINDできない。
でもウェルノンポートで起動したい場合もあるよね。
Linuxの機能により、以下の方法でrootの一部権限をファイルに付与できる。
ウェルノンポートでBINDする権限を付与
# setcap CAP_NET_BIND_SERVICE+ep /[virtualenv環境]/bin/python
確認は以下
# getcap /[virtualenv環境]/bin/python # /[virtualenv環境]/bin/python = cap_net_bind_service+ep
権限剥奪は以下
# setcap -r /[virtualenv環境]/bin/python
停止¶
以下、実行するだけ。
(kippo)$ ./kippoBrinkerStop.sh
kippoBrinker¶
概要¶
kippoBrinkerSumidaには、1つデメリットがあって、ダミーsshを増やした分、プロセスが増えてリソースを圧迫します。
100個とかあげたら、それはもぅ大変な無駄遣いになりそう。
そこで、こいつの登場です。こんな動きをします。
本物sshサーバは、22番からポート番号を変更している前提です。
- ダミープロセスが、22番ポート(変更可)を開いて待ち受ける。釣りである。勝手にアクセスしてくる奴は悪意があると判断する。
- 接続してきた奴がいたら、すぐさまコネクションを切断する。
- すぐさまkippoをポート番号ランダムで25個(変更可)立ち上げる。
- 30分したら、25個のダミーsshは落とす。
- 再び、22番ポートで、釣り。最初に戻る。
これなら、リソースを無駄に消費している状況が30分に抑えられます。
まぁ、しつこくアクセスしてきたら変わらないんですけどね。
インストール&セットアップ¶
kippoインストール先に、以下のファイルを置く。
kippoBrinkerStop.shは、kippoBrinkerSumida.shと共用なので、導入済みならやらなくていい。
kippoBrinker.sh
kippoBrinker.txt
kippoBrinkerDummyEntry.py
kippoBrinkerStop.sh
実行権を付与する。
(kippo)$ chmod u+x kippoBrinker.sh (kippo)$ chmod u+x kippoBrinkerStop.sh
ダミー待受ポート番号、起動するkippoの多重度を、必要に応じて編集する。
(kippo)$ vi kippoBrinker.sh MY_IP_ADDR=`hostname -i|head -1|cut -d' ' -f2` # 自分のIPアドレスを設定(このIPでBINDする) PROC_NUM="25" # ダミーsshdを何個立ち上げるか EXEMPT_PORT_LIST="80 443" # ダミーsshdの対象外ポート DUMMY_ENTRY_PORT="22" # ダミー待ち受けポート
sshのバナー情報を設定する。デフォルトでいくつか入れてあります。
kippoBrinker.shは、ここからランダムに選択してダミーを起動する。
古くなったら、適宜新しいバージョンのバナーを追加するとよいだろう。
$ cat kippoBrinker.txt SSH-2.0-OpenSSH_6.7p1 Debian-5 SSH-2.0-OpenSSH_6.7 SSH-2.0-OpenSSH_6.6.1 SSH-2.0-OpenSSH_6.2 SSH-2.0-OpenSSH_6.0 SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1 SSH-2.0-OpenSSH_5.9 SSH-2.0-OpenSSH_5.8p2_hpn13v11 FreeBSD-20110503 SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu5 SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu6 SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7 SSH-2.0-OpenSSH_5.5p1 Debian-6 SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze1 SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze2 SSH-2.0-OpenSSH_5.3
ウェルノンポートを指定してダミーを起動したい場合¶
上のkippoBrinkerSumidaと同じ。
起動¶
以下、実行するだけ。
(kippo)$ ./kippoBrinker.sh
以下、やってみると動作を確認できる。
すぐさま切断されて、kippoが起動していく。
telnet localhost 22
停止¶
以下、実行するだけ。
kippoBrinkerSumida.shで実行してある分があれば、もろとも一緒に停止する。
(kippo)$ ./kippoBrinkerStop.sh
第7回 ハニーポッター技術交流会(2020/1/25)で得た知見¶
第7回 ハニーポッター技術交流会で登壇しました
すごいね…難読化シェル芸の時もそうでしたが、技術って発信すると集まってくる…最高
つまりですね…こういう小難しいことしなくて良かったんです(5年間気づかなかった)
iptablesにポートリダイレクトを定義すればいい…と…
すみません、先ほどの例はわかりにくいかったですね。訂正です。
— ねこさん⚡🔜Ͷow or Ͷever🔙(ΦωΦ) (@catnap707) January 26 2020
例えば、cowrie(SSHハニーポット)を2222/tcpで待ち受けて、100個のポートリダイレクトを設定するイメージでしょうか。https://t.co/8aikpkt5ul
Memo¶
雑記帳 - cowrieはkippoを改良したSSHハニーポット
http://yagamikou.hateblo.jp/entry/2015/09/25/015735
オープンソースカンファレンス2015 Tokyo/Fall に行ってきました
オープンソースカンファレンスは、オープンソースの今を伝えるイベントで、オープンソース関連のコミュニティや協賛企業・後援団体による、セミナーやプロダクトの展示などを入場・参加料が無料でご覧いただけるイベントです。
春に続き、今回の秋も行ってみました。やっぱ楽しい!
そしてまた沢山ノベルティを頂いてしまった(ありがてぇ・・)
特に面白かった物/興味深かったもの
- #aozorahack
何の気なしに利用させて頂いていた青空文庫なんですが、実は裏側ではきちんと構成管理されているそうです。
でも、機器老朽化により、いつ飛んでもおかしくない状況だったそうで、いま一生懸命サーバ保護と移転作業をしているそうです。
さらに、もっと面白くしたいという思いがあるそうで、そんな強い情熱を感じました。
興味のある方は参加してみては。
- LibreOffice
あのLibreOfficeですが、なんとオンライン版を作っているそうですよ・・・!
インターネット上にあるサーバが開いているポートTop10を出力する
nmapの調査結果(?)から確認することができます。
ワンライナーでいける。
$ curl -s https://svn.nmap.org/nmap/nmap-services|grep '^[a-z].*[0-9]*\/tcp' nmap-services |sort -nr -k 3 | head -10 http 80/tcp 0.484143 # World Wide Web HTTP telnet 23/tcp 0.221265 https 443/tcp 0.208669 # secure http (SSL) ftp 21/tcp 0.197667 # File Transfer [Control] ssh 22/tcp 0.182286 # Secure Shell Login smtp 25/tcp 0.131314 # Simple Mail Transfer ms-wbt-server 3389/tcp 0.083904 # Microsoft Remote Display Protocol (aka ms-term-serv, microsoft-rdp) pop3 110/tcp 0.077142 # PostOffice V.3 microsoft-ds 445/tcp 0.056944 # SMB directly over IP netbios-ssn 139/tcp 0.050809 # NETBIOS Session Service
ちなみに、ポートスキャンは、この上位10ポートをスキャンすると、全体の50%をカバーできるんだそうで、ポート番号を総ナメしなくても、それなりに判っちゃうらしい。
ちょっと思うところがあって、調べてみました。
« 前 1 ... 10 11 12 13 14 ... 16 次 » (111-120/153)
他の形式にエクスポート: Atom