【17-a-l】ママセキュリティエンジニア奮闘記 ~...

74
ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~ 1 吉田万里子 ソニーデジタルネットワークアプリケーションズ #devsumiA 17-A-L

Upload: developers-summit

Post on 12-Apr-2017

726 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ママセキュリティエンジニア奮闘記

~ 子供と一緒にラズパイで遊んでみた♪ ~

1

吉田万里子

ソニーデジタルネットワークアプリケーションズ

#devsumiA 【17-A-L】

Page 2: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

自己紹介

• セキュリティエンジニア

– ソフトウェアの設計~運用におけるセキュリティコンサル

• カバー範囲は、スマホアプリ、サーバーアプリ、サーバーインフラ

• AndroidやLinux kernelのソースを読む機会が多い

• 2歳、4歳の女児の母

– 仕事と子育てに奮闘中

2

Page 3: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

みなさんについて教えてください

3

Page 4: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

4

背景

Page 5: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

2つの大切なこと

5

仕事

子育て

Page 6: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

2つの思い

6

親としての思い

• 子供との時間を大切にしたい • いろいろな経験をさせてあげたい • 考える力を身につけてほしい

エンジニアとしての思い

• エンジニアとしてスキルアップをしたい • 知的好奇心を満たしたい

Page 7: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ママエンジニアのToDo

7

• 脆弱性の調査をする • セキュリティレビューをする • 資料を作成する

• ごはんを食べさせる • 保育園に送迎する • 寝かしつける

• ○○について、正しく理解する • ○○が使えそうなので、調べておく

緊急度

重要度

• 子供と一緒に○○に取り組む • いろいろな経験をさせてあげる • 考える力をつけてあげる

• 上履きを洗う • 交通費の精算をする

• 鼻水を吸引する

Page 8: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ママエンジニアのToDo

8

• バグをとる • 機能を実装する • 資料を作成する

• ごはんを食べさせる • 保育園に送迎する • 寝かしつける

• ○○について、正しく理解する • ○○が使えそうなので、調べておく

重要度

• 子供と一緒に○○に取り組む • いろいろな経験をさせてあげる • 考える力をつけてあげる

• 上履きを洗う • 交通費の精算をする

• 鼻水を吸引する

緊急度

Page 9: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

問題

9

時間がない

Page 10: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ママエンジニアの1日

10

3:00 6:00 9:00 12:00 15:00 18:00 21:00

自分時間

生活&送迎

仕事

移動

移動

生活&送迎

3:00 6:00 9:00 12:00 15:00 18:00 21:00

自分時間

生活

お出かけ

生活

平日

休日

夕食の準備、家の雑用、仕事

仕事時間:8h 生活時間: 5h

生活時間: 7h お出かけ時間: 6.5h

大人1 or 2,子供2

Page 11: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

問題解決のポイント

11

おでかけの時間

〇〇の時間

おでかけの時間を より有意義な時間へ

Page 12: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

子供のプログラミング環境の整備 PCが5,000円で入手可能に

Raspberry Piが2012年に発売され、2016年末までに1000万台販売されている

小学校からのプログラミング学習が必須化

– 文部科学省が2020年から小学校でプログラミング教育を必修化することを検討している

– 品川区立共用小学校でのRaspberry Piを使った授業の様子が「情報処理(2016/12月号) 」で特集された

• 子供向けプログラミングの書籍の出版

– 「ルビィのぼうけん こんにちは! プログラミング」/2016年5月

– 「小学生からはじめるわくわくプログラミング」/2016年5月

12

• https://ja.wikipedia.org/wiki/Raspberry_Pi • http://www.mext.go.jp/b_menu/shingi/chousa/shotou/122/index.htm • https://www.amazon.co.jp/%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86-2016%E5%B9%B412%E6%9C%88%E5%8F%B7/dp/B01M9ID4EE • https://www.amazon.co.jp/gp/product/4798143499

Page 13: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

Scratch開発者の主張

Scratchで得られた「創造力」、「論理的思考能力」、「協調性」は、将来、子供がプログラミングをしなかったとしても役に立つ

13 https://www.ted.com/talks/mitch_resnick_let_s_teach_kids_to_code/transcript?language=en

“Most people won‘t grow up to become professional computer scientists or programmers, but those skills of thinking creatively, reasoning systematically, working collaboratively -- skills you develop when you code in Scratch -- are things that people can use no matter what they’re doing in their work lives.” MIT Media Lab. Mitchel Resnick氏の2012年のTEDスピーチより

そういう力、身につけてほしい

Page 14: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

問題解決のポイント

14

おでかけの時間

RPiの時間

おでかけの時間を より有意義な時間へ

4歳児にはちょっと早い?

Page 15: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ある日の気づき

自転車で献血センターの前を通った日のこと

• 献血→輸血の話の説明をすると、何度も「もう一回」と言った

15

話が分かるようになってきた?

Page 16: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

解決方法

16

親としての思い

世の中の 流れ

エンジニアとしての思い

タイミング

Page 17: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

発表内容

17

目的と方針の確認 作戦実行内容

• さがす • つくる • ひろげる • あじわう

検証

Page 18: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

18

RPi作戦

Page 19: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

目的と方針の確認

19

Page 20: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

目的:2つの思いを叶える

20

親としての思い

• 子供との時間を大切にしたい • いろいろな経験をさせてあげたい • 考える力を身につけてほしい

エンジニアとしての思い

• エンジニアとしてスキルアップをしたい • 知的好奇心を満たしたい

• HWを制御する仕組みを正しく理解したい

• Raspberry Piをさわってみたい

• 子供とじっくりRPi○○制作に取り組みたい

• 動く「仕組み」に興味をもってほしい

ブレイクダウン

ブレイクダウン

Page 21: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

(私の)ブーム理論

過去に訪れたブーム

– 自転車ブーム

– 骨ブーム

– お手紙ブーム

– 包丁ブーム

– レゴブーム

21

• 子供には、次々に何かに対するブームがやってくる

• ブームは、突然訪れ、突然去っていく

• ブームにのると、凄いスピードで吸収する

Page 22: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

方針:ブームにのる

• 子供がブームにのってつくる – 子供にとっても楽しい時間になるように

• 親は、タイミングを合わせて少しだけ背中を押してあげる

• ブームの勢いで、子供が独自の発想をひろげる

22

Page 23: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

さがす

つくるものを探す

23

Page 24: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

4歳児の紹介

• 年齢

– 4歳4ヵ月

• 好きなこと

– ぷーさんのお世話、おままごと

– 自転車、ぶらんこ

• ITリテラシー

– iPadは、自分で「端末ログイン→アプリ起動→アプリで遊ぶ」の一連の作業ができる

– ママの真似をしてキーボードをカチャカチャするのは好き

24

お世話好き、アウトドア好き

ITリテラシーは高め

Page 25: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

プチ経験によるブーム探し-1

25

興味持続時間:10分 ネコの動きは面白がったものの

Scratchのネコにい

ろいろな動きをさせて遊ぶ

没!

Page 26: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

プチ経験によるブーム探し-2

26

興味持続時間:3分 最初は「すごーい!」と言ったものの

たくさんLチカさせて遊ぶ

没!

Page 27: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

プチ経験によるブーム探し-3

27

興味持続時間:15分

サーボモーターでドアを開ける

没! 最初は姉妹で取り合いをして鍵を開け閉めしていたものの

Page 28: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

プチ経験によるブーム探し-4

28

DCモーターでトラックを動かす

興味持続時間:20分(1日目)+15分(2日目)

2日間に渡って、いわしせんべいを運送

Page 29: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

つくるもの

29

https://www.amazon.co.jp/カラー図解-最新-Raspberry-Piで学ぶ電子工作-作って動かして仕組みがわかる-ブルーバックス-金丸隆志-ebook/dp/B01IETZKR6/

Page 30: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

つくる

30

まずはサンプルをそのままつくる

Page 31: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

作業計画

31

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

2017年1月

つくる

ひろげる

予備

勝負の3連休

プチトラック 体験

Page 32: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ブーム到来の確認

• 前日、保育園からの帰り道

– ママ:「あしたさー、〇〇と一緒に〇〇のパソコンで車つくろうかと

思うんだけど」

– 長女:「いいよー」(ニコニコ)

• 当日朝

– 長女:「きょう?きょう車つくるの?」(キラキラ)

32

完璧です!

Page 33: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

1日目作業実績

33

3:00 6:00 9:00 12:00 15:00

はんだづけ モーターボックス 組立て、配線

車体組立 車体組立

工作道具遊び

モーター動作確認

工作道具遊び

長女の作業 • ネジを締める • プッシュピンを押し込む • モーターの動作確認をする

休憩

WebIOPi セットアップ

ママ

共同

長女

Page 34: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

回るテープに大興奮 モーターの先にテープを巻いて、モーターの動作を確認

34

Page 35: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

1日目作業実績

35

3:00 6:00 9:00 12:00 15:00

はんだづけ モーターボックス 組立て、配線

車体組立 車体組立

工作道具遊び

モーター動作確認

工作道具遊び

長女の作業 • ネジを締める • プッシュピンを押し込む • モーターの動作確認をする

休憩

WebIOPi セットアップ

ママ

共同

長女

パパ帰宅 作業時間:4時間

Page 36: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

2日目作業実績

36

3:00 6:00 9:00 12:00 15:00

ママ

共同

子供

休憩・ 買出し

モーター 仮組込

車体組立

子供の作業 • ネジを締める • 電池を入れる • キャタピラを組立てる • モーターの動作確認をする

工作道具遊び 工作道具遊び

車体組立

はんだづけ

モーター動作確認

作業時間:2時間 パパ帰宅

車体組立

Page 37: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ワイヤーパチパチの結果 電池ボックス買出し時の1ショット

37

Page 38: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

3日目作業実績

38

3:00 6:00 9:00 12:00 15:00

部品を 車体に固定

作業時間:30分

ママ

共同

長女

Page 39: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

完成

直進、回転、バック、いろいろな動きを楽しみました

39

大興奮

Page 40: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

40

10分後

Page 41: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

41

パパ:「△△、お出かけするよー」

Page 42: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

42

長女:「○○もいくー」

Page 43: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

43

ママ:「・・・」

Page 44: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ママを残し、パパと次女とお出かけ・・・

44

Page 45: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ひろげる

45

サンプルを拡張して、発想を広げる

Page 46: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

46

叶わず・・・

(2017.02.16時点)

Page 47: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ひとり反省会

47

Page 48: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

何故ブームが急転直下で去ってしまったのか?

• そもそも、ブームは突然に去ってしまうもの

• 一方で・・・

– 2日間が4歳児のブーム持続時間の限界?

– いつも一緒の次女が恋しくて仕方がなくなった?

– モーターやトラックは、長女にとって身近なものでなさすぎた?

– ママとつくる「過程」が楽しかった?出来上がったら興味がない?

48

Page 49: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

不発の「どうして?」-1

iPadをタップすると、モーターについたセロハンテープが回るのを見て

– ママ:「どうしてiPadをタッチしたらテープが回るの?」

– 長女:「え?つながってるの?」

– ママ:「そう、iPadとモーターはつながっているんだよ」

(絵を描いて説明)

– 長女:「・・・」

49

Page 50: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

不発の「どうして?」-2

ワイヤーが抜けて、キャタピラが片側しか動かず、トラックが回るのを見て

– ママ:「どうして回っちゃうの?」

– 長女:「わかんなーい」

– ママ:「片側しか動かないと回っちゃうんだよ」

– 長女:「片側しか動かないと回っちゃうのかー」

50 これから挽回しようと思っていたのに・・・

Page 51: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ブームは去ってしまったようです

大人の時間を楽しみましょう

51

Page 52: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

あじわう

エンジニアとして、Raspberry Piをあじわう

52

Page 53: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

Browser

キャタピラトラックの構成

53

192.168.0.3 (port=8000)

myscript.js

webiopi.js

Raspbian

webiopi.py

myscript.py

GPIO 25,24,23,22

POST /macros/pwm4Write/0,0.133,0,0.161 Host: 192.168.0.3:8000

192.168.0.4

WebIOPi

アプリのコード

Native-C lib

Page 54: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

モーター回転リクエストの処理フロー

POST /macros/pwm4Write/ 0, 0.5744, 0, 0.5833, 0, 3

54

webiopi.Server myscript.py Browser _webiopi.GPIO (native c)

pwm4Write(0, 0.5744, 0, 0.5833 0) pwmWrite(25, 0)

pwmWrite(24, 0.5744)

pwmWrite(23, 0)

pwmWrite(22, 0.5833)

Page 55: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

#define BCM2708_PERI_BASE 0x20000000 #define GPIO_BASE (BCM2708_PERI_BASE + 0x200000) int setup(void) { int mem_fd; uint8_t *gpio_mem; if ((mem_fd = open("/dev/mem", O_RDWR|O_SYNC) ) < 0) { return SETUP_DEVMEM_FAIL; } if ((gpio_mem = malloc(BLOCK_SIZE + (PAGE_SIZE-1))) == NULL) return SETUP_MALLOC_FAIL; …. gpio_map = (uint32_t *)mmap( (caddr_t)gpio_mem, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED, mem_fd, GPIO_BASE); } WebIOPi-0.7.1¥python¥native¥gpio.c

ソースコードの確認(初期化処理-1)

55

←0x2000 0000 0x7E00 0000→

※ Raspberry Pi3で利用されているBCM2836/2837では、周辺機器用のPhysical Address上のアドレスは、0x2000 0000から0x3F000000に変更になっており、WibIOPiのパッチで、Raspberry Pi3の場合は周辺機器用のベースアドレスが変更されていることに注意

←0x0000 0000

←0x2020 0000(GPIO用) 0x7E20 0000→

https://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf

Bus Address Field Name Description Size

0x 7E20 0000 GPFSEL0 GPIO Function Select 0 Function Select 0-9

32

… … … …

6. General Purpose I/O (GPIO)

なるほど・・・

Page 56: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ソースコードの確認-初期化処理-2

56

#define FSEL_OFFSET 0 // 0x0000 #define IN 0 #define OUT 1 void set_function(int gpio, int function, int pud) { if (function == PWM) { function = OUT; enablePWM(gpio); } ... int offset = FSEL_OFFSET + (gpio/10); int shift = (gpio%10)*3; set_pullupdn(gpio, pud); *(gpio_map+offset) = (*(gpio_map+offset) & ~(7<<shift)) | (function<<shift); } WebIOPi-0.7.1¥python¥native¥gpio.c

Bus Address Field Name Description Size

0x 7E20 0000 GPFSEL0 GPIO Function Select 0 Function Select 0-9

32

0x 7E20 0004 GPFSEL1 GPIO Function Select 1 Function Select 10-19

32

0x 7E20 0008 GPFSEL2 GPIO Function Select 2 Function Select 20-29

32

Bit(s) Field Name Description

... ... ...

17-15 FSEL25 FSEL25 - Function Select 25 000 = GPIO Pin 25 is an input 001 = GPIO Pin 25 is an output 100 = GPIO Pin 25 takes alternate function 0 ...

Register Assignment

GPIO Alternate function select register 2

なるほど・・・

Page 57: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

ソースコードの確認-モーター回転処理

57

Bit(s) Field Name Description

31-0 SETn(n=0..31) 0 = No effect 1 = Set GPIO pin n

Bus Address Field Name Description Size

0x 7E20 001C GPSET0 GPIO Pin Output Set 0 32

0x 7E20 0020 GPSET1 GPIO Pin Output Set 1 32

Register Assignment

GPIO Output Set Register 0

void pulseTS(int gpio, struct timespec *up, struct timespec *down) { if ((up->tv_sec > 0) || (up->tv_nsec > 0)) { output(gpio, 1); nanosleep(up, NULL); } if ((down->tv_sec > 0) || (down->tv_nsec > 0)) { output(gpio, 0); nanosleep(down, NULL); } }

#define SET_OFFSET 7 // 0x001c / 4 void output(int gpio, int value) { int offset, shift; if (value) // value == HIGH offset = SET_OFFSET + (gpio/32); else // value == LOW offset = CLR_OFFSET + (gpio/32); shift = (gpio%32); *(gpio_map+offset) = 1 << shift; } WebIOPi-0.7.1¥python¥native¥gpio.c

Bit(s) Field Name Description

31-0 SETn(n=32..53) 0 = No effect 1 = Set GPIO pin n

GPIO Output Set Register 1

なるほど・・・

Page 58: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

/dev/memの権限の確認

• 公開され、root権限でread/write可能

• webiopiモジュールは、root権限で実行されている

• kernelのbuild設定で、CONFIG_DEVMEMが有効になっている

58

pi@raspberrypi:~ $ ps axu|grep webiopi root 570 2.1 1.4 77340 13328 ? Sl 05:01 4:17 /usr/bin/python3 -m webiopi -l /var/log/webiopi -c /etc/webiopi/config

pi@raspberrypi:~/linux $ KERNEL=kernel7 pi@raspberrypi:~/linux $ make bcm2709_defconfig pi@raspberrypi:~/linux $ grep “DEVMEM” .config CONFIG_DEVMEM=y # CONFIG_DEVKMEM is not set

https://github.com/raspberrypi/linux

pi@raspberrypi:~ $ ls -lZ /dev/|grep mem crw-r----- 1 root kmem ? 1, 1 1月 20 18:39 mem

なるほど・・・

Page 59: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

/dev/gpiomemの権限の確認

• /dev/gpiomemは、gpioグループの権限でread/write可能

• RPi.GPIOは、/dev/gpiomemをopenしている

59

pi@raspberrypi:~ $ ls -lZ /dev/|grep mem crw-rw---- 1 root gpio ? 244, 0 1月 20 18:39 gpiomem pi@raspberrypi:~ $ id uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),997(gpio),998(i2c),999(spi)

int setup(void) { // try /dev/gpiomem first - this does not require root privs if ((mem_fd = open("/dev/gpiomem", O_RDWR|O_SYNC)) > 0) { gpio_map = (uint32_t *)mmap(NULL, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, 0); } RPi.GPIO-0.6.3¥source¥c_gpio.c

なるほど・・・

Page 60: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

比較:/dev/memの権限

• /dev/memは存在しない

• kernelのbuild設定で、CONFIG_DEVMEMが有効になっていない

• CTSでチェックしている(Android 2.3以降)

60

bullhead:/ $ ls -al /dev/mem ls: /dev/mem: No such file or directory

# CONFIG_DEVMEM is not set

https://android.googlesource.com/kernel/msm/+/android-msm-bullhead-3.10-marshmallow-mr2/arch/arm64/configs/bullhead_defconfig https://android.googlesource.com/platform/cts/+/master/tests/tests/permission/src/android/permission/cts/FileSystemPermissionTest.java

Android

public void testDevMemSane() throws Exception { File f = new File("/dev/mem"); assertFalse(f.exists()); }

Page 61: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

比較:/dev/mem, /dev/gpiomemの権限 • /dev/memは存在しない

• /dev/gpiomemは、root権限でのみread/write可能

61

130|rpi3:/ $ ls -lZ /dev total 0 crw-rw-rw- 1 root root u:object_r:ashmem_device:s0 10, 60 1970-01-01 00:00 ashmem crw-rw-rw- 1 root root u:object_r:binder_device:s0 10, 59 1970-01-01 00:00 binder crw------- 1 root root u:object_r:fuse_device:s0 10, 229 1970-01-01 00:00 fuse crw------- 1 root root u:object_r:device:s0 248, 0 1970-01-01 00:00 gpiomem

Android Things

Page 62: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

比較:/dev/gpiomem経由のGPIOの制御

• peripheralmanプロセスがroot権限で動いている

• アプリからGPIOを制御するには、PeripheralManagerServieceを利用

62

rpi3:/ $ ps USER PID PPID VSIZE RSS WCHAN PC NAME root 1 0 7336 1552 0 00000000 S /init root 152 1 965944 94308 0 00000000 S zygote audioserver 153 1 21844 7612 0 00000000 S /system/bin/audioserver cameraserver 154 1 14512 6600 0 00000000 S /system/bin/cameraserver keystore 157 1 7476 3648 0 00000000 S /system/bin/keystore media 161 1 39664 9272 0 00000000 S /system/bin/mediaserver root 162 1 22852 3804 0 00000000 S /system/bin/netd root 163 1 9016 3820 0 00000000 S /system/bin/peripheralman system 409 152 1109604 133516 0 00000000 S system_server rpi3:/ $

PeripheralManagerService manager = new PeripheralManagerService(); mGpio = manager.openGpio(GPIO_NAME);

Android Things

https://developer.android.com/things/sdk/pio/gpio.html

なるほど・・・

Page 63: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

検証

RPi作戦の結果を検証

63

Page 64: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

64

親としての思い

• 子供との時間を大切にしたい • いろいろな経験をさせてあげたい • 考える力を身につけてほしい

エンジニアとしての思い

• エンジニアとしてスキルアップをしたい • 知的好奇心を満たしたい

• HWを制御する仕組みを正しく理解したい

• Raspberry Piをさわってみたい

• 子供とじっくりRPi○○制作に取り組みたい

• 動く「仕組み」に興味をもってほしい

(ブレイクダウンした)2つの思いは叶ったか?

※4歳には、早すぎた?

Page 65: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

(オリジナルの)2つの思いは叶ったか?

65

親としての思い

エンジニアとしての思い

• エンジニアとしてスキルアップをしたい

— 一番必要なスキルを身につけられる訳ではない

• 知的好奇心を満たしたい

★★☆

★★☆

• 子供との時間を大切にしたい — 充実した時間を過ごせた

• いろいろな経験をさせてあげたい

• 考える力を身につけてほしい — 動く仕組みはまだ早かった

★★★★★

★★☆

☆☆☆

Page 66: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

RPi作戦は有効な手段か?

• はじめて、長時間1つのことに一緒に取り組むことができた

– 4歳児が、4時間飽きなかった

– 親も興味があるRPiだからこそ、4時間一緒に取り組めた

• おままごとに4時間つきあうのは、きっと無理

• RPiは様々な使い道があり、様々なブームの可能性を探ることができる

– ブームの可能性を探る時間も楽しい

• 子供との時間のためなので、途中で飽きない/心が折れない

• エンジニアでない人には難しい

• 一番必要なスキルを身につけられる訳ではなく、作戦実行には、準備も含めるとかなりの時間がかかる

– 同じ時間をかければ、より重要なコトが複数できたかも 66

Page 67: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

67

まとめ

Page 68: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

まとめ

• RPi作戦を実行し、「2つの思い」を叶えるための手段として有効であることを確認した

– 4歳児は予想以上の集中力を発揮し、親子とも充実した時間を過ごすことができた

• RPi作戦では、「ブーム」を意識し、作戦実行によい効果をもたらしたと思われる

– 「ブームを探す」ために:

• 子供の日常をよく観察し、RPiに向かって連想ゲームを繰り返す

– 「ブームを止めない」ために:

• ドライバーやニッパー等による破壊工作リスクを受容し、子供がしたい作業をさせる

68

Page 69: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

その後・・・

69

おまけ

Page 70: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

2週間後

そっとテレビの前に置いてみた

– 反応なし

70

Page 71: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

3週間後

• ママ:「トラック、どこにあったっけ?」

• 長女:「テレビの上にあったよ」

– 存在は認識しているらしい

– 触りもしない

71

トラックは諦め・・・

Page 72: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

プチ経験によるブーム探し-続1

72

興味持続時間:10分+3分+3分+3分+3分+…

カメラをつけてかいわれ大根を観察

芽がでてふくらんでー 花が咲いて・・・ じゃんけんぽん! はっぱがひらいて にょきにょきにょきー

Page 73: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

プチ経験によるブーム探し-続

73

アイデア募集中

Page 74: 【17-A-L】ママセキュリティエンジニア奮闘記 ~ 子供と一緒にラズパイで遊んでみた♪ ~

74

ありがとうございました