<!-- .slide: data-background="https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg" -->
---
---
<!-- .slide: data-background="https://i.imgur.com/WOUeZBL.jpg" data-transition="zoom-in" -->
<h2 style="
background-color: rgba(0,0,0,0.4);
color: #000;
font-weight: bolder;
-webkit-text-stroke: 2.5px #FFF;
">
builderscon tokyo 2019<br>
へ行ってきた</h2>
---
<!-- .slide: data-transition="fade" data-themes="League" -->
## 内容について
- buildersconとは
- 本編のご紹介
- 見本市
- 前夜祭
---
## buildersconとは
<!-- .slide: data-transition="slide-out" -->
「知らなかった、を聞く」をテーマとした技術を愛する全てのギーク達のお祭り :sparkles:
<!-- .element: class="fragment fade-up" -->
----
日時: 8/29-31 (day0, day1, day2)
場所: 東京電機大学(北千住)

<!-- .slide: data-transition="slide" -->
----
builderscon.io

<!-- .slide: data-transition="slide" -->
----
運営チーム

<!-- .slide: data-transition="slide" -->
----
## 期待大!!
<!-- .slide: data-transition="slide" -->
---
<!-- .slide: data-background="https://i.imgur.com/KLTlviI.jpg" data-transition="zoom-in fade-out"-->
<h1 style="
background-color: rgba(0,0,0,0.4);
color: #000;
font-weight: bolder;
-webkit-text-stroke: 2.5px #FFF;">本編のご紹介</h1>
<!-- .slide: data-transition="slide" -->
<!-- .slide: data-background-transition="slide" -->
---
### 紹介するセッション
* <!-- .element: class="fragment" data-fragment-index="2" -->スーパーカミオカンデの開発と運用
* <!-- .element: class="fragment" data-fragment-index="3" -->もしもハッカーの「サイバー攻撃日誌」が読めたら
* <!-- .element: class="fragment"0 -->コンパイラをつくってみよう
<!-- .slide: data-transition="slide" -->
---

<!-- .slide: data-transition="slide" -->
----
### スーパーカミオカンデ
* 岐阜県 神岡鉱山(地下1000m)に設置した素粒子物理研究のための観測装置
* チェレンコフ光や陽子崩壊の兆候を観測

<!-- .slide: data-transition="slide" -->
----
### 青い光のリング

<!-- .slide: data-transition="slide" -->
----
### 光電子増倍管(PMT)

<!-- .slide: data-transition="slide" -->
----
### 光電子増倍管の仕組み
* アナログ信号に変換出力

<!-- .slide: data-transition="slide" -->
----
### タンクの様子
* PMT12000本

<!-- .slide: data-transition="slide" -->
----
### 大気中のニュートリノ

<!-- .slide: data-transition="slide" -->
----
### 太陽のニュートリノ

<!-- .slide: data-transition="slide" -->
----
### ベテルギウスが近々爆発

<!-- .slide: data-transition="slide" -->
----
### アナログASICとSiTCP

<!-- .slide: data-transition="slide" -->
----
### アナログASIC

<!-- .slide: data-transition="slide" -->
----
### SiTCP

<!-- .slide: data-transition="slide" -->
----
### SiTCP

<!-- .slide: data-transition="slide" -->
----
### システム構成

<!-- .slide: data-transition="slide" -->
----
### 収容されている様子

<!-- .slide: data-transition="slide" -->
----
### ハイパーカミオカンデ

<!-- .slide: data-transition="slide" -->
----
スーパーカミオカンデの開発と運用
END :baseball:
---

<!-- .slide: data-transition="slide-out" -->
----
<!-- .slide: data-background="https://i.imgur.com/kgEN1oB.png?1" -->
<!-- .slide: data-transition="slide" -->
<!-- .slide: data-background-transition="slide" -->
----
### 業務内容
* 契約した企業に対してできるだけリアルな攻撃
* 予告なし
* 御社にとって守りたいか
* 最悪の事態をゴールに設定し、それを目指して攻撃
<!-- .slide: data-transition="slide" -->
----
### 攻撃範囲
* 管理者権限の奪取
* DBから重要なデータを引っこ抜くなど
* 日替わり変更されるパスコードのある部屋へ物理侵入
* 社員証の偽造、不正デバイスをLANに持ち込み
<!-- .slide: data-transition="slide" -->
----
### 実例に基づいたある攻撃手順
* 攻撃目標
* 主力サービスへの侵入
* 端末へのマルウェア感染
<!-- .slide: data-transition="slide" -->
----
### 大学後輩を装ったメール
* 諜報活動
* 添付ファイル(Excelファイル)を送りつける
<!-- .slide: data-transition="slide" -->
----
### マルウェア感染
* Windowsにダウンローダー型マルウェアを感染させる。
* HTTPで攻撃者PCと通信させ
* マルウェア端末に命令(command)実行する
<!-- .slide: data-transition="slide" -->
----
### 権限昇格
* ローカルの管理者権限を奪取
* 権限昇格したら、localの管理者パスワードハッシュの取得
<!-- .slide: data-transition="slide" -->
----
### 横断的侵害
* 取得済アカウントによるリモートコマンド実行
* 他端末へマルウェア感染
<!-- .slide: data-transition="slide" -->
----
### ドメインコントローラーを攻撃
* ドメイン管理者アカウントの取得
* 攻撃ツールによりメモリ上の認証情報を取得
<!-- .slide: data-transition="slide" -->
----
## まとめ
* 攻撃していく過程でだいたいユーザー名、パスワードは取られている
* 二要素認証は有効
* RED TEAMのミッションは、ほぼ成功しているとのこと
<!-- .slide: data-transition="slide" -->
----
もしもハッカーの「サイバー攻撃日誌」が読めたら
END :orange_book:
---

<!-- .slide: data-transition="slide-out" -->
----
### コンパイラについて

<!-- .slide: data-transition="slide" -->
----
### ゴール

<!-- .slide: data-transition="slide" -->
----
### レジスタ

<!-- .slide: data-transition="slide" -->
----
```bash
#!/bin/bash
cat > a.s
echo '-------- a.s ----------------'
cat a.s
echo '-------- result -------------'
gcc a.s
./a.out
echo $?
```
<!-- .slide: data-transition="slide" -->
----
ソース言語の例
```go
package main
import "fmt"
func main() {
fmt.Printf(" .global main\n")
fmt.Printf("main:\n")
fmt.Printf(" movq $42, %%rax\n")
fmt.Printf(" ret\n")
}
```
<!-- .slide: data-transition="slide" -->
----
### 実行
```source
[root@39cc253c1d43 /]# go run main.go | ./asrun
-------- a.s ----------------
.global main
main:
movq $42, %rax
ret
-------- result -------------
42
```
<!-- .slide: data-transition="slide" -->
----
### コンパイラを作る過程
* STEP1: ByteReader

<!-- .slide: data-transition="slide" -->
----
### コンパイラを作る過程
* STEP2: Tokenizer

<!-- .slide: data-transition="slide" -->
----
### コンパイラを作る過程
* STEP3: Parser

<!-- .slide: data-transition="slide" -->
----
<!-- .slide: data-background="https://i.imgur.com/P3bVnX0.jpg?2" -->
<h2 style="
background-color: rgba(0,0,0,0.4);
color: #000;
font-weight: bolder;
-webkit-text-stroke: 2.5px #FFF;">ライブコーディング</h2>
<!-- .slide: data-transition="slide" -->
<!-- .slide: data-background-transition="slide" -->
----
ライブコーディングの様子
{%youtube 1croG9gpwdw %}
<!-- .slide: data-transition="slide" -->
----
### Github
DQNEO/HowToWriteACompiler
<!-- .slide: data-transition="slide-in" -->
----
コンパイラをつくってみよう
END :apple:
---
<!-- .slide: data-background="https://i.imgur.com/w1nekCa.jpg" -->
<h1 style="
background-color: rgba(0,0,0,0.4);
color: #000;
font-weight: bolder;
-webkit-text-stroke: 2.5px #FFF;">見本市</h1>
<!-- .slide: data-transition="slide" -->
<!-- .slide: data-background-transition="slide" -->
----

----

----

----
### ロボットボール

<!-- .slide: data-transition="slide" -->
----
{%youtube z10MlJW0khc %}
<!-- .slide: data-transition="slide" -->
----
### 謎ガジェット

----

----

<!-- .slide: data-transition="slide" -->
----
[謎ガジェットを使う様子](https://twitter.com/i/status/1167405239726530560)
<!-- .slide: data-transition="slide" -->
----
見本市
END :camera:
<!-- .slide: data-transition="slide" -->
---
<!-- .slide: data-background="https://i.imgur.com/ItK3Mqt.jpg?3" -->
<h1 style="
background-color: rgba(0,0,0,0.4);
color: #000;
font-weight: bolder;
-webkit-text-stroke: 2.5px #FFF;">前夜祭</h1>
<!-- .slide: data-transition="slide" -->
<!-- .slide: data-background-transition="slide" -->
----

<!-- .slide: data-transition="slide" -->
----
### Bug #2: Does not make Toast
https://bugs.mysql.com/bug.php?id=2

<!-- .slide: data-transition="slide" -->
----

<!-- .slide: data-transition="slide" -->
----
### MySQLでケーキを焼いた人

<!-- .slide: data-transition="slide" -->
----

<!-- .slide: data-transition="slide" -->
----

<!-- .slide: data-transition="slide" -->
----

<!-- .slide: data-transition="slide" -->
----

<!-- .slide: data-transition="slide" -->
----
### 焼いた

<!-- .slide: data-transition="slide" -->
----
MySQLしゅごい :cake:
<!-- .slide: data-transition="slide" -->
----
...
<!-- .slide: data-transition="slide" -->
----
### MySQLでドローンを飛ばす

<!-- .slide: data-transition="slide" -->
----
...
<!-- .slide: data-transition="slide" -->
----
...
<!-- .slide: data-transition="slide" -->
----
### しくみの解説
* tello はUDP通信でコントロールできる
* MySQLにUDP通信するUDF(ユーザー定義関数)を作成
<!-- .slide: data-transition="slide" -->
----
### UDFサンプル

<!-- .slide: data-transition="slide" -->
----
### udf_sample.cc(抜粋)
```cpp
extern "C" bool takeoff_init(UDF_INIT *initid, UDF_ARGS *args,
char *message) {
return 0;
}
extern "C" void takeoff_deinit(UDF_INIT *initid) {
if (initid->ptr) free(initid->ptr);
}
extern "C" long long takeoff(UDF_INIT *, UDF_ARGS *args) {
long long val = 0;
send_udp((const char *)"takeoff");
return val;
}
```
<!-- .slide: data-transition="slide" -->
----
### send_udp(抜粋)
```cpp
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(PORT);
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero), 8);
if ((numbytes = sendto(sockfd, cmd, strlen(cmd), 0, \
(struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == -1) {
perror("sendto");
}
```
<!-- .slide: data-transition="slide" -->
----
### ビルド

<!-- .slide: data-transition="slide" -->
----
### create function

<!-- .slide: data-transition="slide" -->
----
### 離陸

<!-- .slide: data-transition="slide" -->
----
:clap: :clap: :clap:
<!-- .slide: data-transition="slide" -->
----
前夜祭
END :coffee:
---
<!-- .slide: data-background="https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg" -->
俺たちの Discover Something New はこれからだ!
{"metaMigratedAt":"2023-06-14T23:47:14.024Z","metaMigratedFrom":"YAML","title":"builderscon tokyo 2019へ行ってきた","breaks":true,"description":"builderscon tokyo 2019へ行ってきた話.","lang":"ja-jp","robots":"noindex, nofollow","slideOptions":"{\"transition\":\"fade\",\"backgroundTransition\":\"fade\",\"theme\":\"night\",\"slideNumber\":\"c/t\"}","contributors":"[{\"id\":\"2e400170-85ff-4bb7-80f0-2aa65bd476c6\",\"add\":34577,\"del\":25236}]"}