検索
連載

逃げなかった先人たち 過去のインシデントの「後始末」を振り返る半径300メートルのIT(1/3 ページ)

日々更新される不祥事や事件のニュースに、少し前まで散々話題にしていたことさえ忘れがちになっていませんか?数年前に大きく騒がれた「あの事件」の後始末を振り返ってみると、全ての組織が参考にするべき、貴重な報告が残されていました。

Share
Tweet
LINE
Hatena

 サイバー攻撃やITに関係する事件が、日々世間を賑(にぎ)わせています。多くの場合、それは報道という形で私たちの耳に入ってくるわけですが、次から次に報じられる新しいニュースに流され、どんな大きな事件もいつの間にか忘れられてしまいがちです。

 つらい事件の記憶が薄れるのは、ある意味では正しいのかもしれません。しかし、事件から得た教訓まで忘れてしまってはいけません。そこで今回は、皆さんもきっと名前だけは覚えているであろう過去の事件と、事件が世間の記憶から消えそうになる頃に発表された「報告書」に着目したいと思います。

あの事件、覚えていますか?
あの事件、覚えていますか?

「標的型攻撃」の典型例となった、日本年金機構の不正アクセス問題

 まずは2015年5月に明るみに出た、日本年金機構のインシデントから見ていきましょう。日本年金機構のネットワーク内にマルウェア「Emdivi」が侵入し、遠隔操作が行われた事件です。この事件は「職員が自分宛てに届いたメールの不審に気付かず、添付されたマルウェアのファイルをクリックしてしまった」という、マルウェア侵入のきっかけが話題になりました。

 この事件は、いわゆる「標的型攻撃」の典型的な事例として、現在でもたびたび言及されます。事件の後、日本年金機構と厚生労働省、内閣サイバーセキュリティセンター(NISC)の3機関から報告書が公開されました。

日本年金機構における不正アクセスによる情報流出事案について(日本年金機構)

日本年金機構における不正アクセスによる情報流出事案について (厚生労働省)

日本年金機構における個人情報流出事案に関わる原因究明調査結果(NISC)

 これらが公開された当時、その詳細な内容に驚いたものです。例えばNISCの調査結果においては、攻撃が2015年5月8日に始まり、波状攻撃を受け続けて侵入を許した後に、ネットワーク内で感染を広げた様子がチャートの形で表現されています。

NISCによる調査報告書には、攻撃のタイミングと感染端末のチャートが図示されている
NISCによる調査報告書には、攻撃のタイミングと感染端末のチャートが図示されている

 このチャートだけでも、学ぶべき点は多いのではないでしょうか。また、同報告書の「今回のサイバー攻撃の特徴と対策」や「本部及び NISC がとるべき再発防止対策」には、組織がとるべき対策がリストアップされています。これは大変有用な資料です。このインシデントが発生したのは2015年ですが、現在においても、同じような攻撃に対して弱点を抱える組織は多いかもしれません。

日本年金機構情報漏えい事件でも悪用された「盲点」とは:セキュリティのアレ(6) - @IT

よくぞ出した、NISCの調査報告! | セキュリティ対策のラック

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
PREVIEW
'; }else{ mask.innerHTML = '
画像をご覧いただくには会員登録が必要です
' + btn_txt + '
'; } if((_preview && location.hash.indexOf('maskoff') !== -1) || (typeof itmIdLogin !== 'undefined' && itmIdLogin == 1)){ img.style.visibility = 'visible'; }else{ nxt.parentNode.insertBefore(mask,nxt); } } } }; /** * mask_leadin : subscrion マスクの実行 * @param {Object} マスク用パラメータ(sc,lc,ac,bc)と記事の状態(subscription_exist,subscription_objects,preview)を持った Object */ function mask_leadin(_p){ if(!_p.subscription_exist) return false; addCSS('/css/spv/cmsInput.niche.css?date=202407081140'); let d = document; let button = {}; if(_p.preview){ button.link = 'javascript:void(0)'; button.text = '続きを読む(TestMode)'; button.func = 'if(window.confirm(¥'マスクを解除しますか?¥')){location.href = ¥'#maskoff¥';location.reload();}else{return false;}'; } else { button.link = 'https://id.itmedia.co.jp/isentry/contents?sc=' + _p.sc + '&lc=' + _p.lc + '&ac=' + _p.ac + '&cr=' + _p.cr + '&bc=' + _p.bc + '&return_url=' + encodeURIComponent(d.URL) + '&pnp=1&encoding=shiftjis'; button.text = '続きを読む'; button.func = 'cx_itm_mask_button();'; } button.elem = createElementWithAttribute('div',{"class":"colBoxButton"},function(div){ div.appendChild(createElementWithAttribute('a',{"href":button.link,"onclick":button.func},function(a){ a.innerText = button.text; })); }); let mask = createElementWithAttribute('div',{"class":"mask_leadin"},function(div){ div.innerHTML = '
'; }); mask.querySelector('.colBoxIndex').appendChild(button.elem); let subscription = _p.subscription_objects[0]; if((_p.preview && location.hash.indexOf('maskoff') !== -1) || (typeof itmIdLogin !== 'undefined' && itmIdLogin == 1)){ subscription.style.display = 'block'; }else{ subscription.parentNode.insertBefore(mask,subscription); } }; /*IMAGE MASK & Lead-in*/ (function(d){ let membersControl = searchMembersControl(); // %メンバー用マスクの存在チェックと対象要素取得 let imageMask = searchImageMask(); // 画像マスクの存在チェックと対象要素取得 let subscription = searchSubscription(); // subscription マスクの存在チェックと対象要素取得 let isPreview = d.domain.match(/(preview|broom|localhost)/); let param ={ isLoginURL:'//status.itmedia.co.jp/isLoginEP.cgi', sc:'56cc29cee9e859a5314952b8184da882e2482d7bc17234b4ca333bfffe5f74f3', lc:'cdad86ca9450d1c143675a8436131cabaf55905c114fa4524bf6a9ec5662cad7', ac:'1a599d548ac1cb9a50f16ce3ba121520c8ab7e05d54e097bfa5b82cb5a328a0f', bc:1, members_control_exist:membersControl.exist, image_mask_exist:imageMask.exist, image_mask_objects:imageMask.Objects, subscription_exist:subscription.exist, subscription_objects:subscription.Objects, preview:isPreview }; let setExtraMask = function(){ if (d.getElementById('isLogin') || isPreview) { // isLogin 呼び出し済みであれば各マスク処理を実行 if (imageMask.exist) { param.cr = '2c93f81754142e105c8bca17824745d14c8c4d69e9d7ede513e5530546e97641'; mask_images(param); } if (subscription.exist) { param.cr = '90cfa6d666682f8b5dc3c798020e432fc294ef430deb069008d4f8bceeb02418'; mask_leadin(param); } } else { // isLogin がなければ、呼び出した後で再実行 let js = mask_images.setISLOGIN(param.isLoginURL,param.sc); js.addEventListener('load',function(){ setExtraMask(); }); } }; if (imageMask.exist || subscription.exist) { setExtraMask(); } })(document);
LOADING
'; w.removeEventListener('scroll',arguments.callee,false); htmlRequest(_xhrfile,_idname); elem.setAttribute('data-status','true'); console.log('finished : ' + _idname); }else{ // console.log('retry : ' + _idname); } }else{ e_loader.innerHTML = '
LOADING
'; w.removeEventListener('scroll',arguments.callee,false); htmlRequest(_xhrfile,_idname); elem.setAttribute('data-status','true'); console.log('finished : ' + _idname); } } }; w.addEventListener('scroll',scrolling,false); // スクロールイベント scrolling(); // スクロールイベント(閲覧位置が半端な場合のために 1 回実行させる) }; w.addEventListener('load',loading,false); // LOAD 後に実装 };