第15回 カーネル/VM探検隊&懇親会@東京 part 1 #kernelvm

2
前へ 1 2 3 ・・ 20 次へ
Yoshikazu GOTO @goto_ipv6

早川さん:言語仕様: ・RISCっぽいISA →64bitの固定長命令 →固定長のスタック →64ビットのレジスタ11本 →ALU,JMP,LD/ST系命令が一通り →Atomic命令、BPF由来のパケットバッファを操作する命令 #kernelvm

2019-07-20 13:09:33
えぬかね📡 @n_kane

#kernelvm 配信音声が小さすぎる等ありましたらよしなに叫んでくださいませ

2019-07-20 13:09:37
Yoshikazu GOTO @goto_ipv6

→Call命令がある(カーネルの関数が呼べる) ・直接書くのはしんどいのでCで書いてコンパイルする →LLVMのバックエンドがある →CLANGとかでコンパイルしてバイトコードを取り出して、と #kernelvm

2019-07-20 13:10:07
NOKUBI Takatsugu野首貴嗣 @knok

言語使用  RISCっぽいISA  64ビット固定長命令  固定長スタック  64ビットレジスタ11本  ALU, JMP, LD/ST等の命令  Atomic明利、BPF由来  call命令 helper functionsと呼ばれるカーネル関数が呼べる 直かくのは大変  Cで書いてコンパイルする  LLVMバックエンドがある #kernelvm

2019-07-20 13:10:14
Yoshikazu GOTO @goto_ipv6

早川さん:Cの呼び出し規則に関する工夫: ・JITしたときにc86_64とARM64とコンパチになるように作られている →FFIのオーバーヘッドが少ない #kernelvm

2019-07-20 13:10:53
NOKUBI Takatsugu野首貴嗣 @knok

呼び出し規則の工夫がありオーバーヘッドが少ない #kernelvm

2019-07-20 13:11:01
Yoshikazu GOTO @goto_ipv6

早川さん:Map: ・eBPFとユーザースペースから使えるKVN →Array, Hash, Trie, Queue, Stack, etc... →lookup/update/delete/enqueue/dequeue/peek #kernelvm

2019-07-20 13:11:58
NOKUBI Takatsugu野首貴嗣 @knok

Map  eBPFとユーザー空間から使えるKVS   helper funtionとして呼ぶ   ユーザーではbpf(2) ユースケース  カウンタ、ルーティングテーブル #kernelvm

2019-07-20 13:11:59
Hiroshi Shimamoto @hshimamoto

eBPFとユーザスペースから使えるKVSがある。#kernelvm

2019-07-20 13:12:11
Fadis @fadis_

eBPFから外の関数を呼ぶ時の呼び出し規則がx86_64と64bit ARMのABIにそのまま対応付けられる仕様になっていて、これらのアーキテクチャでは効率よく関数呼び出しができる、と #kernelvm

2019-07-20 13:12:12
NOKUBI Takatsugu野首貴嗣 @knok

bpf(2)  ioctl  バイトコードの読み込み、Mapの作成など #kernelvm

2019-07-20 13:12:37
Yoshikazu GOTO @goto_ipv6

早川さん:bpf(2): ・eBPFの仕組み全般を扱うシステムコール ・バイトコードのロードなど…… #kernelvm

2019-07-20 13:12:45
イーロン・マスクツイッターやめろ @naota344

bpfシステムコールは少しebpfのあとだった気がする #kernelvm

2019-07-20 13:13:19
Yoshikazu GOTO @goto_ipv6

早川さん:Verifier: ・eBPFバイトコード自体にセキュリティ的な配慮はない #kernelvm

2019-07-20 13:14:12
Yoshikazu GOTO @goto_ipv6

・カーネルのVerifierが安全に実行できるか静的に検証する →実行のオーバーヘッドが低い →ループは基本的に禁止 →JMP命令で変なところにとぼうとしていないか? →LD/STで変なところから読み書きしようとしていないか? →などなど #kernelvm

2019-07-20 13:14:17
NOKUBI Takatsugu野首貴嗣 @knok

eBPF自体にセキュリティ的な配慮はない Verifier  カーネル内で静的なチェックを行う機構   静的なので実行時パフォーマンスは良い  チェック内容   ループの禁止   JMPで変なところを呼ばない   LD/STで変なところを読まない チェックを通らないとロードすらできない #kernelvm

2019-07-20 13:14:18
イーロン・マスクツイッターやめろ @naota344

ループは最近一部許可する議論されてますね #kernelvm

2019-07-20 13:14:25
まきひろ @makihiro_vr

eBPFのverifierってNaCl臭いなぁ #kernelvm

2019-07-20 13:14:31
Yoshikazu GOTO @goto_ipv6

・チェックが通らなければロードすらもできない ・本当にこれで大丈夫? →賛否両論がある →→Spectre…… #kernelvm

2019-07-20 13:14:58
NOKUBI Takatsugu野首貴嗣 @knok

本当にこれで大丈夫か?  Spectre等  サイドチャネル攻撃にはたぶん弱い #kernelvm

2019-07-20 13:15:09
Yoshikazu GOTO @goto_ipv6

早川さん:ここからすごいマニアックな話をしようかと #kernelvm

2019-07-20 13:15:16
Fadis @fadis_

eBPF自体にはセキュリティに対する対処がない(よんではいけない物を呼ぶコード等を表現できる)為、カーネルがeBPFのコードをロードする際に静的な検証を行なっている。eBPFの静的解析に抜けがあるとカーネルの多岐に渡る機能に穴が開く為、その安全性は頻繁に議論になる、と #kernelvm

2019-07-20 13:15:23
Hiroshi Shimamoto @hshimamoto

スライドの背景に何かが見えている…。#kernelvm

2019-07-20 13:15:29
前へ 1 2 3 ・・ 20 次へ