Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
log4shellの簡単な解説と Webエンジニアとして心がけたいこと / mild-web-...
Search
Hiroto YAMAKAWA
December 27, 2021
Programming
0
370
log4shellの簡単な解説と Webエンジニアとして心がけたいこと / mild-web-sap#16a
ゆるWeb勉強会@札幌 OnLine #16
https://mild-web-sap.connpass.com/event/229117/
Hiroto YAMAKAWA
December 27, 2021
Tweet
Share
More Decks by Hiroto YAMAKAWA
See All by Hiroto YAMAKAWA
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
43
Javaへの新たなHello, World / yuruchitose-04
gishi_yama
0
33
JSR381、知っていますか?Javaの画像認識APIのはなし / SC4Y23-05
gishi_yama
0
190
jPeekでのクラスの凝集度計測の試行 / mild-web-sapporo#24
gishi_yama
0
330
Github CopilotとChatGPTを使って感じた使い分けの糸口 / JavaDo #22
gishi_yama
1
1.4k
子ども向けプログラミング体験教室でのHololens2利用事例 / IoTLT#97
gishi_yama
0
91
AWS Serverless Java Container, Spring Bootで試してみた / javado22
gishi_yama
0
530
Hololens2と 小中高プログラミング教育の利用にむけた試行 / XRMTG 2023-1-18
gishi_yama
0
290
小学生がmicro:bitを用いて行える課題解決を意識した自由研究事例 /SC4Y '22#4
gishi_yama
0
400
Other Decks in Programming
See All in Programming
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
4
270
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
930
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
120
命名をリントする
chiroruxx
1
410
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
2
260
Symfony Mapper Component
soyuka
2
730
From Translations to Multi Dimension Entities
alexanderschranz
2
130
return文におけるstd::moveについて
onihusube
1
1.1k
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
230
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
270
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
6
890
php-conference-japan-2024
tasuku43
0
290
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
A better future with KSS
kneath
238
17k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
A Philosophy of Restraint
colly
203
16k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Making the Leap to Tech Lead
cromwellryan
133
9k
Side Projects
sachag
452
42k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
Building Flexible Design Systems
yeseniaperezcruz
327
38k
How to train your dragon (web standard)
notwaldorf
88
5.7k
A Tale of Four Properties
chriscoyier
157
23k
Transcript
#ゆるWeb札幌 !"#$%&'!!()*+,-./ 0'123456.789:;<=>. 山川 広人(@gishi_yama) 公立千歳科学技術大学 情報システム工学科 1
#ゆるWeb札幌 公立千歳科学技術大学 情報システム工学科 専任講師 R&D: Experimental Development of ICT Services (ex:
City-Bus Tacking System) Computer in Education, Programming & Programmer's Learning ?@ABCDEFGFHFIFJK&"L"MNO&PL"%'NFONQKR 2 千歳市バスロケーションシステム「ちーなび」の開発 適応型学習支援システムの開発、活用 レポート内の話ことば診断システムの開発 大学・小学校・地域でのプログラミング教育の実践
#ゆるWeb札幌 !"#$%&'!!STUVWXYXZW$$XX[ 3 JPCERT/CC Apache Log4jの任意のコード実行の脆弱性(CVE-2021-44228)に関する注意喚起 より抜粋(2021-12-13確認) JNDI は、Java Naming
and Directory Interface API の略語です。API を呼び出すことに より、アプリケーションはリソースとほかのプログラムオブジェクトを検出します。リソースとは、データ ベースサーバーやメッセージングシステムなどのシステムへの接続を提供するプログラムオブジェクト です。 https://docs.oracle.com/cd/E19823-01/819-1551/jndi.html より抜粋(2021-12-26確認)
#ゆるWeb札幌 \]^_D`ab3cab3def 4 12/10 午前 Google Trends "log4j" "すべての国" "2021/12/5-12/26"
で検索(2021-12-26確認) ようこそJava裏パークへ だいぶ落ち着いてきた? (収束したとは言ってない) 週明けにピーク
#ゆるWeb札幌 g_h0'1i_jklm8=nop.q"Thrs=8tD !"#$%&'!!hu=8)*h-v7wgD xyz_({|}~(-v_g/ •€•‚ƒ`„…†‡ˆ‰ˆmnop„q"TŠ/ ‹Œgn>.•Ž•h•„‘’“l= 5
#ゆるWeb札幌 6 画像引用:https://www.govcert.admin.ch/blog/zero-day-exploit-targeting-popular-java-library-log4j/
#ゆるWeb札幌 7 画像引用:https://news.sophos.com/en-us/2021/12/12/log4shell-hell-anatomy-of-an-exploit-outbreak/
#ゆるWeb札幌 ”•–—(˜™„•š–—Š›œg•’t/ žŸ ¡¢£_¤¥Š¦+§< 8
#ゆるWeb札幌 žŸ ¡qT_(¤¥¨•©(›œŒ¢£ 9 攻撃用のclassファイルをおいたHTTPサーバー 攻撃用サーバーのアドレス、classファイルの場所を 返答する攻撃用LDAPサーバー 脆弱性のあるlog4j を用いたログ表示コード ①JNDI
lookupで 攻撃用LDAPサーバーを参照する 文字列を入力 ②本来、文字列をログ表示だけすべきところ、攻撃用LDAPにアクセスしてしまう(攻撃コードのURLを返答) ③攻撃コードのURLの リソースを取得・実行 してしまう (攻撃コードを返答) ② ③
#ゆるWeb札幌 10 ”•(¤¥ªC«¬(-Ÿ`˜¦R 攻撃用文字列を入力すると、 ログは表示されず、攻撃用LDAPサーバーにアクセス発生 返答されたURLの攻撃用classファイルを取得し、 実行してしまう(電卓が表示される) 電卓起動 コード
#ゆるWeb札幌 たとえば、Javaのマイナーバージョン最新版(この場合は1.8.0_312)を使った場合は、 外部サーバーへの問合せは発生するが、Classファイルの実行は行われない (※解決したわけではなく、内部パラメータを外部サーバーに送信しうるなどの問題が残る) •©(›œª® 11 攻撃用文字列を入力すると、 攻撃用LDAPサーバーにアクセス発生 返答されたURLの読み込みは実行しない (ダミーのクラス名
foo を表示して終了)
#ゆるWeb札幌 たとえば、ライブラリ自体を更新した場合は、外部サーバーへの問合せ自体が発生しない (※サーバー側でプロセス実行はできなくなったが、内部パラメータなどは送信する可能性がある) •©(›œª¯ 12 攻撃用文字列を入力しても、 攻撃用LDAPサーバーにアクセスせず、 そのまま文字列表示 再現・検証を行うことで、自分たちが自サービス等に行なった対応方法が十分か、だけではなく、 脆弱性発覚後のさまざまな(一部憶測も含めた)情報の検証、それに基づく判断にも役立つ
#ゆるWeb札幌 根本対策 :ライブラリやJDK(JRE)を最新版に更新(かつ、診断や更新しやすい環境を作る) 軽減策 :サーバーのアクセス可能先を見直す、アクセス経路で弾く(WAF)、etc... 心がけたいこと: 上記を迅速に進めるためにも、日頃からCERTの情報にアンテナをたてておくことや、 攻撃や脆弱性の原理などを時には試行・確認し、勘所を増やすことも重要 ---------- 特に若い世代のみなさんには...既知ではあるものの起こりうる脆弱性の勘所も沢山ある 例えば:
SQLインジェクションには PreparedStatementを使う CSRFにはSessionトークンなどを利用する etc ... 上記のような対策が必要だということは理解していても、一部は意識せずにフレームワークが守ってくれる時代でも あるけど、実際にSQLインジェクションやCSRFを自分の環境で再現・対策方法を検証してみたことはありますか? ⇒ 攻撃やその防御手法を再現・検証することでより深い理解を得られる機会になる ※もちろん、再現はローカル環境に限り、他者の環境への実行や悪用は絶対ダメ •©(w.‘.t9:;<=>. 13