Slide 1

Slide 1 text

Ran350 ran350jp ran350 2024/8/12 セキュリティキャンプ2024 LT 2038年問題検出ツールの紹介 〜UNIXよ2038年を越えてゆけ〜

Slide 2

Slide 2 text

自己紹介 ◆ 経歴 Ran350 ◆ 備考 ran350jp ran350 • 立命館大学大学院 情報理工学研究科 修士 2 年 • 上原哲太郎 研究室 • ISACA 大阪支部 • Webエンジニア3年目 ◆ 資格 • 情報処理安全確保支援士 • 応用情報技術者 試験 #大阪出身 #お笑いライブ鑑賞 #将棋 #麻雀 #ウイスキー

Slide 3

Slide 3 text

技術的負債と時刻表現 • サマータイム問題 • GPSロールオーバー問題 • うるう年やうるう秒の考慮不足 ...など 3 技術的負債とは、実装当時 最適解と考えられていたものが時間経過ととも に評価されなくなること。 負債が膨れ上がると、やがてシステムの安定稼働を脅かすようになる。 • 2000年問題 • 昭和100年問題 • NTP 2036年問題 • 2038年問題 𝕏: @ran350jp

Slide 4

Slide 4 text

2038年問題とは 4 1. UNIX time (※) を 32bit 符号付き整数型 で扱う。 2. 2038/1/19 03:14:07 以降の時刻で 整数オーバーフロー する。 3. 整数オーバーフローした値がシステムの各所で参照され、不具合に繋がる。 2038/1/19に時間表現がオーバーフローし、システム障害を引き起こす可能性がある という問題。 2004年、IIJや日本IBM、KDDIなどのシステムで2038年問題に起因する不具合が発生した。 「西暦2038年問題」でトラブル相次ぐ | 日経クロステック(xTECH) https://xtech.nikkei.com/it/members/NC/ITARTICLE/20040325/1/ 発生原理 事例 ※ UNIX time とは 1970/1/1 00:00:00からの経過秒 で 時刻を表現する形式 𝕏: @ran350jp

Slide 5

Slide 5 text

2038年問題は脅威になりうるか? 5

Slide 6

Slide 6 text

2038年問題パターン > 仕様編 𝕏: @ran350jp

Slide 7

Slide 7 text

2038年問題パターン > 実装編 typedef int time_t; 𝕏: @ran350jp ※ 多くの環境で int 型は 32bit 符号付き整数型

Slide 8

Slide 8 text

2038年問題対策 typedef long long time_t; 𝕏: @ran350jp ※ long long型は 64bit 符号付き整数型

Slide 9

Slide 9 text

これで2038年問題対応は完璧! 9

Slide 10

Slide 10 text

ほんとうに? 10

Slide 11

Slide 11 text

2038年問題パターン > 実装編 > ダウンキャスト 11 変数代入時のダウンキャスト return 時の 暗黙的ダウンキャスト 関数の引数代入時 の 暗黙的ダウンキャスト 明示的なダウンキャスト typedef long long time_t; でも 64bit → 32bit型へキャストすると 𝕏: @ran350jp

Slide 12

Slide 12 text

2038年問題対応、time_t の 64bit化 だけでは不十分 2038年問題対応したつもりでも 実は抜け漏れがあったというシナリオ 12 見落とし 実は UNIX timeが 32bit 符号付き整数型に なる処理が存在していた 2038年問題 発生 整数オーバフローが発生 不具合につながる 2038年問題対応の実施 UNIX time 用変数を 32bit整数型→64bit整数 型に再定義 𝕏: @ran350jp

Slide 13

Slide 13 text

UNIX time が 一貫して32bitを超えているかを 網羅的に調べないといけない 13

Slide 14

Slide 14 text

大変 14

Slide 15

Slide 15 text

プログラムにやらせたい 15

Slide 16

Slide 16 text

ということで 16

Slide 17

Slide 17 text

つくった! 17

Slide 18

Slide 18 text

y2k38-checker https://github.com/cysec-lab/y2k38-checker Clang コンパイル時にプラグインとして与える おなじみの Clang 警告として教えてくれる 𝕏: @ran350jp

Slide 19

Slide 19 text

y2k38-checker https://github.com/cysec-lab/y2k38-checker 𝕏: @ran350jp

Slide 20

Slide 20 text

検出手法 20 データフロー解析 抽象構文木解析 型・字句情報を用いて検出対象を 発見する手法。検出対象の抽象構 文木のパターン を定義し、合致 するコードを 探索する。 値の取りうる範囲から実際に整 数オーバーフローが起こりうる かを判定する。 C/C++ ソース コード 整数OF 可能性を 警告 検出対象 を探索 構文解析 𝕏: @ran350jp

Slide 21

Slide 21 text

ISACA大阪支部 総会にて研究講演(本日) 発表 21 2023年2月 2024年4月 2024年6月 2024年7月 2024年6月 2024年9月 情報処理学会 論文誌ジャーナル「組込みシステム工学特集」 サイバーセキュリティシンポジウム道後 2023にて、学生研究賞を受賞 IoTセキュリティセンターにてポスター発表 DICOMOシンポジウム2023にて、優秀プレゼンテーション賞を受賞 卒業論文 修士論文 2025年2月 採録内定 𝕏: @ran350jp

Slide 22

Slide 22 text

詳しくはリポジトリを参照 Star してもらえると喜びます 𝕏 ran350jp Thank you for Listening!