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
390
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
開発環境構築の共通要素:必要なものを手元に持ってきて使えるようにする/JavaDo28
gishi_yama
0
84
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
120
Javaへの新たなHello, World / yuruchitose-04
gishi_yama
0
42
JSR381、知っていますか?Javaの画像認識APIのはなし / SC4Y23-05
gishi_yama
0
220
jPeekでのクラスの凝集度計測の試行 / mild-web-sapporo#24
gishi_yama
0
370
Github CopilotとChatGPTを使って感じた使い分けの糸口 / JavaDo #22
gishi_yama
1
1.6k
子ども向けプログラミング体験教室でのHololens2利用事例 / IoTLT#97
gishi_yama
0
100
AWS Serverless Java Container, Spring Bootで試してみた / javado22
gishi_yama
1
680
Hololens2と 小中高プログラミング教育の利用にむけた試行 / XRMTG 2023-1-18
gishi_yama
0
310
Other Decks in Programming
See All in Programming
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.1k
体得しよう!RSA暗号の原理と解読
laysakura
3
540
コンテナでLambdaをデプロイするときに知っておきたかったこと
_takahash
0
150
Fluent UI Blazor 5 (alpha)の紹介
tomokusaba
0
140
プログラミング教育のコスパの話
superkinoko
0
120
MCP世界への招待: AIエンジニアが創る次世代エージェント連携の世界
gunta
2
590
Firebase Dynamic Linksの代替手段を自作する / Create your own Firebase Dynamic Links alternative
kubode
0
180
Modern Angular:Renovation for Your Applications @angularDays 2025 Munich
manfredsteyer
PRO
0
140
eBPF Updates (March 2025)
kentatada
0
130
JavaOne 2025: Advancing Java Profiling
jbachorik
1
320
Devinのメモリ活用の学びを自社サービスにどう組み込むか?
itarutomy
0
1.7k
CRE Meetup!ユーザー信頼性を支えるエンジニアリング実践例の発表資料です
tmnb
0
360
Featured
See All Featured
A better future with KSS
kneath
238
17k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.7k
A designer walks into a library…
pauljervisheath
205
24k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Side Projects
sachag
452
42k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Six Lessons from altMBA
skipperchong
27
3.7k
The Language of Interfaces
destraynor
157
24k
Being A Developer After 40
akosma
90
590k
Producing Creativity
orderedlist
PRO
344
40k
Building Your Own Lightsaber
phodgson
104
6.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.6k
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