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
100
ドメイン層×日本語プログラミング/seb_sapporo_04
gishi_yama
1
140
Javaへの新たなHello, World / yuruchitose-04
gishi_yama
0
54
JSR381、知っていますか?Javaの画像認識APIのはなし / SC4Y23-05
gishi_yama
0
240
jPeekでのクラスの凝集度計測の試行 / mild-web-sapporo#24
gishi_yama
0
390
Github CopilotとChatGPTを使って感じた使い分けの糸口 / JavaDo #22
gishi_yama
1
1.7k
子ども向けプログラミング体験教室でのHololens2利用事例 / IoTLT#97
gishi_yama
0
110
AWS Serverless Java Container, Spring Bootで試してみた / javado22
gishi_yama
1
760
Hololens2と 小中高プログラミング教育の利用にむけた試行 / XRMTG 2023-1-18
gishi_yama
0
320
Other Decks in Programming
See All in Programming
Javaに鉄道指向プログラミング (Railway Oriented Pro gramming) のエッセンスを取り入れる/Bringing the Essence of Railway-Oriented Programming to Java
cocet33000
2
580
Effect の双対、Coeffect
yukikurage
5
1.4k
イベントストーミングから始めるドメイン駆動設計
jgeem
4
870
WindowInsetsだってテストしたい
ryunen344
1
190
Gleamという選択肢
comamoca
6
740
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
120
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
270
ドメインモデリングにおける抽象の役割、tagless-finalによるDSL構築、そして型安全な最適化
knih
11
1.9k
C++20 射影変換
faithandbrave
0
500
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
320
F#で自在につくる静的ブログサイト - 関数型まつり2025
pizzacat83
0
310
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
210
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
51
8.4k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Building Adaptive Systems
keathley
43
2.6k
Adopting Sorbet at Scale
ufuk
77
9.4k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Into the Great Unknown - MozCon
thekraken
39
1.9k
Optimizing for Happiness
mojombo
379
70k
Embracing the Ebb and Flow
colly
86
4.7k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.9k
Building an army of robots
kneath
306
45k
What's in a price? How to price your products and services
michaelherold
245
12k
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