SlideShare una empresa de Scribd logo
1 de 10
Hacking Ctrl-C
@uchan_nos
2015/03/06
Ctrl-C
 アプリを止めるのに使う
 SIGINT を発生させる
_人人人人人人人人人人人人_
> 誰がSIGINTを作るのか <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
端末とプロセス
端末ドライバ プロセス
bash/dev/tty
/dev/pts/*
uchida@usvr14:infra$ lsof -p 29542(ログインシェルのPID)
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 29542 uchida 0u CHR 136,7 0t0 10 /dev/pts/7
bash 29542 uchida 1u CHR 136,7 0t0 10 /dev/pts/7
bash 29542 uchida 2u CHR 136,7 0t0 10 /dev/pts/7
bash 29542 uchida 255u CHR 136,7 0t0 10 /dev/pts/7
端末ラインディシプリン
端末装置ドライバ
端末ラインディシプリン
read/write関数
ユーザプロセス(bashなど)
Ctrl-C (0x03) 文字が来たら
INT シグナルを生成
Ctrl-Z (0x1A) 文字が来たら
TSTP シグナルを生成
その他カノニカル処理
CR->LF変換、行バッファなど
ssh user@host sleep 100
端末ドライバ
ssh
端末ラインディシプリン
read/write
TCP/IP, ソケット etc
sleep 100
ssh user@host sleep 100
端末ドライバ
ssh sleep 100
端末ラインディシプリン
read/write
TCP/IP, ソケット etc
Ctrl-Cを入力すると、sshプロセスに
SIGINT が送信され、sshプロセスが
終了する。
→sleep 100は生き残る
Ctrl-C
^C
SIGINT
closed
ssh –t user@host sleep 100
端末ドライバ
ssh
sleep 100
端末ラインディシプリン
read/write
TCP/IP, ソケット etc
疑似端末マスタ
端末ラインディシプリン
read/write
疑似端末スレーブ
ssh –t user@host sleep 100
端末ドライバ
ssh
端末ラインディシプリン
read/write
TCP/IP, ソケット etc
疑似端末マスタ
端末ラインディシプリン
read/write
疑似端末スレーブ
Ctrl-C
^C
^C
^C
SIGINT
^C文字がリモートまで
伝わり、リモートで
SIGINTが発生
→sleep 100は終了する
sleep 100
ssh –t user@host sleep 100
端末ドライバ
ssh
端末ラインディシプリン
read/write
TCP/IP, ソケット etc
疑似端末マスタ
端末ラインディシプリン
read/write
疑似端末スレーブ
Ctrl-C
^C
^C
^C
SIGINT
^C文字がリモートまで
伝わり、リモートで
SIGINTが発生
→sleep 100は終了する
sleep 100
OpenSSH の sshtty.c : 84
tio.c_lflag &= ~(ISIG | ICANON...);
端末を raw モードに変更し、
^C を受信してもシグナルを
生成しないようにしている。
まとめ
 ssh user@host sleep 100
 host 上で端末を持たない sleep プロセスが起動
 Ctrl-C でローカルの端末ドライバが SIGINT 生成
 ssh –t user@host sleep 100
 host 上で疑似端末を持つ sleep プロセスが起動
 Ctrl-C で host の疑似端末ドライバが SIGINT を生成
 ssh user@host
 コマンド無指定時はデフォルトで –t
 ssh –T user@host でログイン後 Ctrl-C してみよう!
詳しくはこちらにまとめてあります
http://wiki.dev.cybozu.co.jp/display/~kota-uchida/Linux+signals

Más contenido relacionado

Destacado

やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作りHidemi Kawai
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門demuyan
 
Edomae 2015 - マルウェアを解析してみよう
Edomae 2015 - マルウェアを解析してみようEdomae 2015 - マルウェアを解析してみよう
Edomae 2015 - マルウェアを解析してみようSatoshi Mimura
 
Effective modern c++ 5
Effective modern c++ 5Effective modern c++ 5
Effective modern c++ 5uchan_nos
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門Hirotaka Kawata
 
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介Yuma Ohgami
 
C++でできる!OS自作入門
C++でできる!OS自作入門C++でできる!OS自作入門
C++でできる!OS自作入門uchan_nos
 
ハッキング実演
ハッキング実演ハッキング実演
ハッキング実演Ken Ogura
 
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)kikuchan98
 

Destacado (9)

やってよかったOS作り
やってよかったOS作りやってよかったOS作り
やってよかったOS作り
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門
 
Edomae 2015 - マルウェアを解析してみよう
Edomae 2015 - マルウェアを解析してみようEdomae 2015 - マルウェアを解析してみよう
Edomae 2015 - マルウェアを解析してみよう
 
Effective modern c++ 5
Effective modern c++ 5Effective modern c++ 5
Effective modern c++ 5
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
 
C++でできる!OS自作入門
C++でできる!OS自作入門C++でできる!OS自作入門
C++でできる!OS自作入門
 
ハッキング実演
ハッキング実演ハッキング実演
ハッキング実演
 
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
 

Similar a Hacking Ctrl-C

Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstepsmokey monkey
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタl_b__
 
Androidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうAndroidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうksk sue
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりYuya Rin
 
dofilewrite and vn_write
dofilewrite and vn_writedofilewrite and vn_write
dofilewrite and vn_writekusabanachi
 
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + PerlNaoya Ito
 
Displaylink : Reloaded
Displaylink : ReloadedDisplaylink : Reloaded
Displaylink : ReloadedMasataka Kondo
 
2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmfAtomu Hidaka
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料Yasutaka Hamada
 
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めYou&I
 
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)Kazuyuki Sato
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
60年代ゲームハードPDP-7のご紹介
60年代ゲームハードPDP-7のご紹介60年代ゲームハードPDP-7のご紹介
60年代ゲームハードPDP-7のご紹介Yuma Ohgami
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
20110715 osc2011 kyoto
20110715 osc2011 kyoto20110715 osc2011 kyoto
20110715 osc2011 kyotoYamauchi isamu
 
Androidロボットサミットin名古屋
Androidロボットサミットin名古屋Androidロボットサミットin名古屋
Androidロボットサミットin名古屋Kenichi Yoshida
 
Docker調査20150704
Docker調査20150704Docker調査20150704
Docker調査20150704HommasSlide
 

Similar a Hacking Ctrl-C (20)

Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstep
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタ
 
Androidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうAndroidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃう
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 
dofilewrite and vn_write
dofilewrite and vn_writedofilewrite and vn_write
dofilewrite and vn_write
 
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + Perl
 
Displaylink : Reloaded
Displaylink : ReloadedDisplaylink : Reloaded
Displaylink : Reloaded
 
2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料
 
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始め
 
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
 
Gingerbread
GingerbreadGingerbread
Gingerbread
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
60年代ゲームハードPDP-7のご紹介
60年代ゲームハードPDP-7のご紹介60年代ゲームハードPDP-7のご紹介
60年代ゲームハードPDP-7のご紹介
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
Adk2012
Adk2012Adk2012
Adk2012
 
20110715 osc2011 kyoto
20110715 osc2011 kyoto20110715 osc2011 kyoto
20110715 osc2011 kyoto
 
Androidロボットサミットin名古屋
Androidロボットサミットin名古屋Androidロボットサミットin名古屋
Androidロボットサミットin名古屋
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
Docker調査20150704
Docker調査20150704Docker調査20150704
Docker調査20150704
 

Más de uchan_nos

MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するuchan_nos
 
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事uchan_nos
 
小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器uchan_nos
 
トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路uchan_nos
 
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクトOpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクトuchan_nos
 
自作言語でお絵描き
自作言語でお絵描き自作言語でお絵描き
自作言語でお絵描きuchan_nos
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会uchan_nos
 
サイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返るサイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返るuchan_nos
 
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道uchan_nos
 
Security Nextcamp remote mob programming
Security Nextcamp remote mob programmingSecurity Nextcamp remote mob programming
Security Nextcamp remote mob programminguchan_nos
 
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPSLangsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPSuchan_nos
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作uchan_nos
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装uchan_nos
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osuchan_nos
 
Building libc++ for toy OS
Building libc++ for toy OSBuilding libc++ for toy OS
Building libc++ for toy OSuchan_nos
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019uchan_nos
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019uchan_nos
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2uchan_nos
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structureuchan_nos
 

Más de uchan_nos (20)

MikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続するMikanOSと自作CPUをUSBで接続する
MikanOSと自作CPUをUSBで接続する
 
OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事OSを手作りするという趣味と仕事
OSを手作りするという趣味と仕事
 
小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器小型安価なFPGAボードの紹介と任意波形発生器
小型安価なFPGAボードの紹介と任意波形発生器
 
トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路トランジスタ回路:エミッタ接地増幅回路
トランジスタ回路:エミッタ接地増幅回路
 
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクトOpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
 
自作言語でお絵描き
自作言語でお絵描き自作言語でお絵描き
自作言語でお絵描き
 
OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会OpeLa 進捗報告 at 第23回自作OSもくもく会
OpeLa 進捗報告 at 第23回自作OSもくもく会
 
サイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返るサイボウズ・ラボへ転籍して1年を振り返る
サイボウズ・ラボへ転籍して1年を振り返る
 
USB3.0ドライバ開発の道
USB3.0ドライバ開発の道USB3.0ドライバ開発の道
USB3.0ドライバ開発の道
 
Security Nextcamp remote mob programming
Security Nextcamp remote mob programmingSecurity Nextcamp remote mob programming
Security Nextcamp remote mob programming
 
Langsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPSLangsmith OpeLa handmade self-hosted OS and LPS
Langsmith OpeLa handmade self-hosted OS and LPS
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
 
レガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free osレガシーフリーOSに必要な要素技術 legacy free os
レガシーフリーOSに必要な要素技術 legacy free os
 
Building libc++ for toy OS
Building libc++ for toy OSBuilding libc++ for toy OS
Building libc++ for toy OS
 
プランクトンサミットの歴史2019
プランクトンサミットの歴史2019プランクトンサミットの歴史2019
プランクトンサミットの歴史2019
 
Introduction of security camp 2019
Introduction of security camp 2019Introduction of security camp 2019
Introduction of security camp 2019
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
 
Timers
TimersTimers
Timers
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structure
 

Hacking Ctrl-C

  • 2. Ctrl-C  アプリを止めるのに使う  SIGINT を発生させる _人人人人人人人人人人人人_ > 誰がSIGINTを作るのか <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
  • 3. 端末とプロセス 端末ドライバ プロセス bash/dev/tty /dev/pts/* uchida@usvr14:infra$ lsof -p 29542(ログインシェルのPID) COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 29542 uchida 0u CHR 136,7 0t0 10 /dev/pts/7 bash 29542 uchida 1u CHR 136,7 0t0 10 /dev/pts/7 bash 29542 uchida 2u CHR 136,7 0t0 10 /dev/pts/7 bash 29542 uchida 255u CHR 136,7 0t0 10 /dev/pts/7
  • 4. 端末ラインディシプリン 端末装置ドライバ 端末ラインディシプリン read/write関数 ユーザプロセス(bashなど) Ctrl-C (0x03) 文字が来たら INT シグナルを生成 Ctrl-Z (0x1A) 文字が来たら TSTP シグナルを生成 その他カノニカル処理 CR->LF変換、行バッファなど
  • 5. ssh user@host sleep 100 端末ドライバ ssh 端末ラインディシプリン read/write TCP/IP, ソケット etc sleep 100
  • 6. ssh user@host sleep 100 端末ドライバ ssh sleep 100 端末ラインディシプリン read/write TCP/IP, ソケット etc Ctrl-Cを入力すると、sshプロセスに SIGINT が送信され、sshプロセスが 終了する。 →sleep 100は生き残る Ctrl-C ^C SIGINT closed
  • 7. ssh –t user@host sleep 100 端末ドライバ ssh sleep 100 端末ラインディシプリン read/write TCP/IP, ソケット etc 疑似端末マスタ 端末ラインディシプリン read/write 疑似端末スレーブ
  • 8. ssh –t user@host sleep 100 端末ドライバ ssh 端末ラインディシプリン read/write TCP/IP, ソケット etc 疑似端末マスタ 端末ラインディシプリン read/write 疑似端末スレーブ Ctrl-C ^C ^C ^C SIGINT ^C文字がリモートまで 伝わり、リモートで SIGINTが発生 →sleep 100は終了する sleep 100
  • 9. ssh –t user@host sleep 100 端末ドライバ ssh 端末ラインディシプリン read/write TCP/IP, ソケット etc 疑似端末マスタ 端末ラインディシプリン read/write 疑似端末スレーブ Ctrl-C ^C ^C ^C SIGINT ^C文字がリモートまで 伝わり、リモートで SIGINTが発生 →sleep 100は終了する sleep 100 OpenSSH の sshtty.c : 84 tio.c_lflag &= ~(ISIG | ICANON...); 端末を raw モードに変更し、 ^C を受信してもシグナルを 生成しないようにしている。
  • 10. まとめ  ssh user@host sleep 100  host 上で端末を持たない sleep プロセスが起動  Ctrl-C でローカルの端末ドライバが SIGINT 生成  ssh –t user@host sleep 100  host 上で疑似端末を持つ sleep プロセスが起動  Ctrl-C で host の疑似端末ドライバが SIGINT を生成  ssh user@host  コマンド無指定時はデフォルトで –t  ssh –T user@host でログイン後 Ctrl-C してみよう! 詳しくはこちらにまとめてあります http://wiki.dev.cybozu.co.jp/display/~kota-uchida/Linux+signals