SlideShare a Scribd company logo
RACE CONDITIONの話
Fukui Tech 7.5
2017/02/25 (Sat)
@hama7230
WHOAMI
• @hama7230
• 東京の大学生
• 元福井の高専生
• CTF歴 1年6ヶ月
• CTFチーム
「TokyoWesterns」のpwn要
員
何を話すか
• Race Conditionの解説
• CODEGATE 2017 Quals 「Hunting」の解説
RACE CONDITION
• 日本語にすると競合状態
• マルチタスク(もしくはマルチスレッド)な環境に
おいて、同一のリソースへほぼ同時にアクセスし
たときに、予定外の処理結果が生じる問題
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c304.html
DIRTY COW
• CVE-2016-5195
• https://dirtycow.ninja/
• Race Conditionを使った脆弱性
• Linuxカーネルにおける権限昇格の脆弱性
• Read Onlyな権限である、本来なら編集できない
ファイルを編集できてしまう脆弱性
• Androidなどで攻撃が確認された
CTFにおけるRACE CONDITION
• CTFでもRace Conditionを取り扱った問題は存在す
る
• pwnジャンルとして出題される傾向にある
• 処理全体を追いかけて、どの部分でRace Condition
が起こせるか見極める必要があり、難易度が高い
PWN問題のパターン
• サーバ上で動作するバイナリを攻略し、フラグを
読むことが目的
• バイナリには脆弱性があり、必ず攻略可能となっ
ている
• ncで接続するリモートシェル奪取型と、sshで接続
するローカル権限昇格型の2種類に分かれる
• ローカル権限昇格型では、ログイン時の権限でフ
ラグを読むことができず、suidビットがついた脆
弱なバイナリを攻略していく
HUNTIG
• CODEGATE 2017 Qualsで出題
• sshでログインするローカル権限昇格型
• Race Conditionを起こし、本来なら起こりえない処
理を発生させてフラグを得る問題
• Tokyo Westernsも解けたが、かなり時間をかけて
しまった
初期調査 (1/2)
% file ./hunting
./hunting: setgid ELF 64-bit LSB executable, x86-64, version 1
(SYSV), dynamically linked (uses shared libs), for GNU/Linux
2.6.32,
BuildID[sha1]=c32e1cc2bfd1447bd571a21303dd40e79324e2bb,
stripped
-r-xr-sr-x 1 hama hama 15056 2月 10 16:04 hunting*
• 64bitのダイナミッックリンク
• setgidされている => 所有者の権限で実行される
初期調査 (2/2)
% checksec ./hunting
[*] '/home/hama/ctf/CodeGate2017/Hunting/hunting'
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: No PIE
• セキュリティ機構の確認
• よくある標準的なバイナリ
RELRO
• RELRO: Partial RELRO
• RELocation Read-OnlyからRELRO
• ライブラリ関数の解決をいつ行い、解決されたア
ドレスを管理するテーブルが書き換え可能かどう
か
• Partialでは、書き換えが可能でありGOTの書き換
えで処理の制御を奪うことができる
CANARY
• スタック上に置かれるランダムな値
• stack-smashing protectionによって追加されるデータ
• 関数の処理が始まる前にスタック上に設置され、
関数の処理が終わるときに書き換わってないかど
うか確認する
• 書き換わっていた場合は、バッファオーバーフ
ローが発生したとしてプログラム自体を終了する
• huntingもcanaryが存在する
• canaryの値がリークできれば突破可能
動作確認
% ./hunting
1. How to play
2. Use skill
3. Change skill
4. Remove skill
5. Recieve suggestion
6. Exit
choice:
• 1~6まで選択できる。それ以外を入力するバイナ
リは終了する
HOW TO PLAY
• メッセージを出すだけの処理
• そのまま終了する
USE SKILL
========================================Boss' Attack
Boss is Attacking you!
select shield
1. iceshield
2. fireshield
3. windshield
choice:
========================================Skill Activation
You use attack
Boss‘s hp is 50 (初期値は100)
=======================================
2 (自分の入力)
Your HP is 250 (初期値は500)
• 防衛に失敗したパターン
USE SKILL
========================================Boss' Attack
Boss is Attacking you!
select shield
1. iceshield
2. fireshield
3. windshield
choice:
========================================Skill Activation
You use attack
Boss's hp is 50
=======================================
1 (自分の入力)
You succeed in defense
Your HP is 500
========================================
• 防衛に成功したパターン
CHANGE SKILL
select skill
1. attack
2. fireball
3. iceball
4. magicball
5. lightning
6. hellfire
7. icesword
8. magicsword
9. hollylight
choice:
• スキルが選択可能
• 5以上はレベルを上げないと選択できない
REMOVE SKILL
• スキルを初期状態のattackに戻す
RECIEVE SUGGESTION
• メッセージを受け取る処理
• バッファオーバーフローが発生する
• canaryがあるため検知されて処理が終了してしま
う
EXIT
• バイナリが終了する
動作解析
• Bossとバトルしているみたい
• Use Skillでスキルを使ってBossのHPを減らしてい
る
• Skillによって与えられるダメージは違う
• Bossからも攻撃される
• shieldの選択しだいではBossからの攻撃も防げる
• 何をすればいいのか?
動作解析
• フラグを出力する処理
はバイナリ中に存在し
ている
• この処理が呼ばれる条
件は?
動作解析
• Bossに4回勝てばフラグを表示する処理へと分岐する
動作解析
• ボスの攻撃を防ぐshieldの選択は必ず当てることが
できる
• time(NULL)を元にしたsrandを使用している
• 同様に、同じ時間にtime(NULL)すれば同じ乱数が
得られる
• 乱数を得るプログラムを書き、同時に実行させて
乱数を予測する
• この部分はRace Conditionとはあまり関係ないので
割愛します
動作解析
• skillは250回しか使用できない
• 250回目の使用後に強制終了
• (BossのHPがとんでもないことに…)
動作解析
• レベル4のBossのHP初期値は0x7fffffff_fffffffe
(9223372036854775806)
• 初期のattackでは50しかHPが減らない
• 他のskillでも多くて50万程度
• まっとうにやっていてはフラグは得られない
• なんとかしてHPを0以下にしたい
動作解析
• ここでRace Conditionを考える
• UseSkillの処理は、スレッドを新しく生成して実行される
• start_routineにはUseSkillの処理を行う関数のアドレスがあ
る
• 最初の6択とshieldの3択は同一のスレッドで実行される
• UseSkillだけが独立している
動作解析
• 選んだskillによっては、sleepするタイミングと秒
数が違う
• fireballでは、ダメージ計算後にsleep(1)
• iceballでは、ダメージ計算前にsleep(0)
• magicballでは、ダメージ計算前にsleep(0)
動作解析
• sleep(1)が呼ばれるとどうなるか?
• usedSkillの扱いに誤りがある
• sleep中のUseSkillの処理が終わる前に、再度UseSkillを選択
したりChangeSkillすることができる
• これはRace Conditionを起こせそう
動作解析
• スキルによってダメージ処理が違う
• 4以下と5以上
• 4以下では、32bitを拡張して64bitにして計算する
• 5以上では、64bitのまま計算する
動作解析
• 4以下は右側
• 5以上は左側の処理がされる
• 4以下では、cdqe命令を使い、raxレジスタの中身
を32bitから64bitへ拡張している
動作解析
• iceswordの攻撃値は0xffffffff
• 32bitでは-1
• 64bitでは4294967295
• cdqe命令で拡張されると0xffffffff_ffffffff (-1:64bit)
• iceswordを4以下のSkillの攻撃値にできればよさそ
う
方針
• 4以下でsleep(1)をするSkillで、UseSkillする
• sleepしている間に、ChangeSkillでiceswordにすり
替えてUseSkillする
• 4以下のUseSkillで攻撃値がiceswordの0xffffffffになり、
64bit拡張されて-1になって実行される
• 攻撃値がマイナス値になって、BossのHPを増やす
ことができる
EXPLOIT解説
• まずは、3回勝利しBossのレベル4まで上げる
• attackの攻撃値50だと82回攻撃すれば、レベル4になる
• 以下の工程を行うことでBossのHPを1上げることができる
• ChangeSkillでSkillをfireballへ変更
• fireballでUseSkill
• ChangeSkillでSkillをiceswordへ変更
• iceswordでUseSkill
• 整数値オーバーフローで、9223372036854775806
(0x7fffffff_fffffffe)から-
9223372036854775808(0x80000000_00000000)
EXPLOIT
• BossのHPをマイナスにすることができ、フラグを得るこ
とができた
• 成功率は低い(bufferingの影響だと思われる)
まとめ
• Race Conditionを起こし、本来なら起こりえない処
理を起こした
• マルチスレッド・マルチタスクな開発で、資源の
アクセス管理が杜撰だと有り得ない処理が起こり
うる

More Related Content

What's hot

Ctfのためのpython入門
Ctfのためのpython入門Ctfのためのpython入門
Ctfのためのpython入門
shiracamus
 
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
Isaac Mathis
 
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfesレベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
Tokoroten Nakayama
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
7shi
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
MCC CTF講習会 pwn編
MCC CTF講習会 pwn編MCC CTF講習会 pwn編
MCC CTF講習会 pwn編
hama7230
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
Masakazu Matsushita
 
ctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリングctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリング
junk_coken
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
t-sin
 
Composer bin plugin / ツールの依存管理から解放される
Composer bin plugin / ツールの依存管理から解放されるComposer bin plugin / ツールの依存管理から解放される
Composer bin plugin / ツールの依存管理から解放される
Kentarou Takeda
 
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみたLinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Hiraku Toyooka
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
 

What's hot (20)

Ctfのためのpython入門
Ctfのためのpython入門Ctfのためのpython入門
Ctfのためのpython入門
 
PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25PWNの超入門 大和セキュリティ神戸 2018-03-25
PWNの超入門 大和セキュリティ神戸 2018-03-25
 
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfesレベルを上げて物理で殴れ、Fuzzing入門 #pyfes
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
MCC CTF講習会 pwn編
MCC CTF講習会 pwn編MCC CTF講習会 pwn編
MCC CTF講習会 pwn編
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
ctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリングctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリング
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
 
Composer bin plugin / ツールの依存管理から解放される
Composer bin plugin / ツールの依存管理から解放されるComposer bin plugin / ツールの依存管理から解放される
Composer bin plugin / ツールの依存管理から解放される
 
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみたLinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 

Viewers also liked

CTFでアレコレ
CTFでアレコレCTFでアレコレ
CTFでアレコレ
hama7230
 
Race condition
Race conditionRace condition
情報危機管理コンテスト 二次予選&決勝の話
情報危機管理コンテスト 二次予選&決勝の話情報危機管理コンテスト 二次予選&決勝の話
情報危機管理コンテスト 二次予選&決勝の話
裕貴 西野
 
Processes and Thread OS_Tanenbaum_3e
Processes and Thread OS_Tanenbaum_3eProcesses and Thread OS_Tanenbaum_3e
Processes and Thread OS_Tanenbaum_3e
Le Gia Hoang
 
6. processes and threads
6. processes and threads6. processes and threads
6. processes and threads
Marian Marinov
 
Race conditions
Race conditionsRace conditions
Race conditions
Mohd Arif
 
Semaphore
SemaphoreSemaphore
Semaphore
naniix21_3
 
Semaphores OS Basics
Semaphores OS BasicsSemaphores OS Basics
Semaphores OS Basics
Shijin Raj P
 
Operating system critical section
Operating system   critical sectionOperating system   critical section
Operating system critical section
Harshana Madusanka Jayamaha
 
Producer consumer
Producer consumerProducer consumer
Producer consumer
Mohd Tousif
 
Inter process communication
Inter process communicationInter process communication
Inter process communication
RJ Mehul Gadhiya
 
Interprocess communication
Interprocess communicationInterprocess communication
Interprocess communication
Sushil Singh
 
Inter process communication
Inter process communicationInter process communication
Inter process communication
Mohd Tousif
 
OS Process Synchronization, semaphore and Monitors
OS Process Synchronization, semaphore and MonitorsOS Process Synchronization, semaphore and Monitors
OS Process Synchronization, semaphore and Monitors
sgpraju
 
Как создать эффективную презентацию?V 02
Как создать эффективную презентацию?V 02Как создать эффективную презентацию?V 02
Как создать эффективную презентацию?V 02
Nadezhda Ivera
 
Process synchronization in Operating Systems
Process synchronization in Operating SystemsProcess synchronization in Operating Systems
Process synchronization in Operating Systems
Ritu Ranjan Shrivastwa
 
Ch7 OS
Ch7 OSCh7 OS
Ch7 OS
C.U
 
Op Sy 03 Ch 23
Op Sy 03 Ch 23Op Sy 03 Ch 23
Op Sy 03 Ch 23
Google
 
Inter Process Communication
Inter Process CommunicationInter Process Communication
Inter Process Communication
Anil Kumar Pugalia
 

Viewers also liked (19)

CTFでアレコレ
CTFでアレコレCTFでアレコレ
CTFでアレコレ
 
Race condition
Race conditionRace condition
Race condition
 
情報危機管理コンテスト 二次予選&決勝の話
情報危機管理コンテスト 二次予選&決勝の話情報危機管理コンテスト 二次予選&決勝の話
情報危機管理コンテスト 二次予選&決勝の話
 
Processes and Thread OS_Tanenbaum_3e
Processes and Thread OS_Tanenbaum_3eProcesses and Thread OS_Tanenbaum_3e
Processes and Thread OS_Tanenbaum_3e
 
6. processes and threads
6. processes and threads6. processes and threads
6. processes and threads
 
Race conditions
Race conditionsRace conditions
Race conditions
 
Semaphore
SemaphoreSemaphore
Semaphore
 
Semaphores OS Basics
Semaphores OS BasicsSemaphores OS Basics
Semaphores OS Basics
 
Operating system critical section
Operating system   critical sectionOperating system   critical section
Operating system critical section
 
Producer consumer
Producer consumerProducer consumer
Producer consumer
 
Inter process communication
Inter process communicationInter process communication
Inter process communication
 
Interprocess communication
Interprocess communicationInterprocess communication
Interprocess communication
 
Inter process communication
Inter process communicationInter process communication
Inter process communication
 
OS Process Synchronization, semaphore and Monitors
OS Process Synchronization, semaphore and MonitorsOS Process Synchronization, semaphore and Monitors
OS Process Synchronization, semaphore and Monitors
 
Как создать эффективную презентацию?V 02
Как создать эффективную презентацию?V 02Как создать эффективную презентацию?V 02
Как создать эффективную презентацию?V 02
 
Process synchronization in Operating Systems
Process synchronization in Operating SystemsProcess synchronization in Operating Systems
Process synchronization in Operating Systems
 
Ch7 OS
Ch7 OSCh7 OS
Ch7 OS
 
Op Sy 03 Ch 23
Op Sy 03 Ch 23Op Sy 03 Ch 23
Op Sy 03 Ch 23
 
Inter Process Communication
Inter Process CommunicationInter Process Communication
Inter Process Communication
 

Similar to Race condition

JavaLearning_1.pptx
JavaLearning_1.pptxJavaLearning_1.pptx
JavaLearning_1.pptx
RyuuGaku
 
Cocos2d-x Console @Cocos Talks #3
Cocos2d-x Console  @Cocos Talks #3Cocos2d-x Console  @Cocos Talks #3
Cocos2d-x Console @Cocos Talks #3
Akihiro Matsuura
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
Kentaro Ohkouchi
 
LINE LIFF with Azure ハンズオン資料 - Azure サービス解説
LINE LIFF with Azure ハンズオン資料 - Azure サービス解説LINE LIFF with Azure ハンズオン資料 - Azure サービス解説
LINE LIFF with Azure ハンズオン資料 - Azure サービス解説
Kazumi IWANAGA
 
Openstack ceph 20171115 vtj
Openstack ceph 20171115 vtjOpenstack ceph 20171115 vtj
Openstack ceph 20171115 vtj
Takehiro Kudou
 
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
Takahiro Okumura
 

Similar to Race condition (7)

JavaLearning_1.pptx
JavaLearning_1.pptxJavaLearning_1.pptx
JavaLearning_1.pptx
 
Cocos2d-x Console @Cocos Talks #3
Cocos2d-x Console  @Cocos Talks #3Cocos2d-x Console  @Cocos Talks #3
Cocos2d-x Console @Cocos Talks #3
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
 
LINE LIFF with Azure ハンズオン資料 - Azure サービス解説
LINE LIFF with Azure ハンズオン資料 - Azure サービス解説LINE LIFF with Azure ハンズオン資料 - Azure サービス解説
LINE LIFF with Azure ハンズオン資料 - Azure サービス解説
 
Openstack ceph 20171115 vtj
Openstack ceph 20171115 vtjOpenstack ceph 20171115 vtj
Openstack ceph 20171115 vtj
 
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
 

Race condition