セキュリティキャンプ2021応募課題晒し

今更なのですが、先日修了書を貰ったと言うことでセキュリティキャンプの応募課題を晒していきたいと思います。

僕が参加したのはDトラックの「セキュリティイシュートラック」です。

問1

あなたが最近目にしたニュース記事・ブログ記事、あるいは炎上した記事の中で、セキュリティ情報の伝え方に関して「これはちょっとおかしいな」と感じたものがあれば、その理由とともに教えてください。

ワクチン大規模接種東京センターの予約システムのSQLインジェクションに関する記事です。リンクを以下に貼ります。

https://news.yahoo.co.jp/articles/e3cd31c100652095e1479568e5988303a1cbcf2a?page=3
その記事ではネットで取得した情報を元にサーバーに対して実際に攻撃をしており、また記事内でその行為を犯罪とは明言せずに不具合に対して煽るような発信をしています。

まず記事を公開した段階で攻撃が出来てしまうのに攻撃方法を載せてはいけないと思います。理由としてはその記事を見た人が実際に攻撃をする可能性があるためです。

また同じ理由から記事内でこれらの攻撃は犯罪行為だと書かない事も問題があります。

問2

サイバーセキュリティのマンガを作成する場合、何をテーマに訴えるマンガにしたいですか? 1コマ/4コママンガ、または最大4ページでおさまる長さのマンガを想定して、作りたいマンガのテーマとあらすじ(またはアイディア)を書いてみてください。

オンラインゲームに関するセキュリティをテーマにしたいです。

あらすじとしては実際にSNS上に攻撃方法がアップされている問題などについてとりあげます。そこで沢山の人がその攻撃をサーバーに対してしているが捕まってないだけでその行為が犯罪であるということを伝える漫画にします。

理由としてはこのような攻撃を実行する人はまだ情報リテラシーが十分にない学生に多いと感じているからです。実際にSNSでそのサイバー攻撃を用いて仲間を不正に勝たせ、その報酬としてお金をもらっている学生がいました。今の社会では普及している技術に対してセキュリティ意識が低いと思いこのような構成にしました。

問3

ディープラーニングベースの顔認証システムのメリット/デメリットを、セキュリティの観点から教えてください。 また、デメリットを改善する方法も教えてください。

<メリット>

まず顔認証のメリットとしては従来の認証と違い不正アクセスがされにくい事があります。従来の認証方法だとショルダーハッキングによってスマホや講座、マンションのパスワードを盗み見られる脆弱性がありますが顔認証だとその心配はありません。

<デメリット>

デメリットに関しては従来の認証方法ではパスワードが流失した場合速やかに変更する事で悪用されることを防げますが顔は一般的に変える事ができないので悪用されてしまいます。対処法としては顔認証とパスワード認証の両方を用いてより堅牢にする事が挙げられます。

<改善案>

また、ディープラーニングは中身がブラックボックスなため顔認証システムにセキュリティホールが見つかった際に対応が困難という問題があります。改善策としては顔認証のみに頼らず他の認証も同時に運用することです。

ディープラーニングベースだと学習の方向性を思うように決めれない為、別の人の顔でログインできてしまう可能性があります。

改善案としてはリリースまで十分に時間をとってどのように学習しているかを調査し、実際にテストを試し製品としての完成度を高めることです。

問4

サイバーセキュリティに関する犯罪の一つに、不正アクセス禁止法があります。

①どのような行為が不正アクセス禁止法違反になりますか?具体的に記載してください。

本来は接続できる権限のないユーザーが他人のIDやパスワードを用いたりサービスの脆弱性をついたりして不正に利用できる状態にする事です。 有名な例としてはセブンペイの不正アクセスが挙げられます。この事件では攻撃対象のサイトとは別のサイトで漏洩したIDとパスワードのリストを使い、攻撃対象のサイトへ不正ログインを行なっています。

脆弱性スキャンツールを使用することやペネトレーションテスト(攻撃者視点による侵入テスト)が不正アクセス禁止法違反に該当する場合はどのような調査をした場合でしょうか。挙げられるだけ挙げてください。
なお、勝手にスキャンツールやペネトレーションテストを他人のサーバに実施するだけでは同法違反になるかは不明ですので、当該ツールのどのような行為が不正アクセス禁止法違反になるかを具体的に記載してください。

・該当するペネトレーションテストが運営・管理側からの了承を受けてない場合

・運営元から了承を得ているがペネトレーションテストの過程を誰でも見ることのできる記事してあげる。

・自身のパスワードを忘れたことを理由に脆弱性スキャンツールなどを用いてパスワードを不正に取得した場合。

・Nmapを用いて他者の運営するサービスにスキャンをかける。また、稼働しているサービスの脆弱性をついて攻撃をする、空いてるポートを調べる。

・攻撃の意思がなくてもOWASP ZAPを攻撃モードにして無差別に攻撃を行う

問5

ファイルを持たないマルウェア(いわゆるファイルレスマルウェア)が流行っていますが、対策が困難とされている理由を考察してください。

まず対策に関して考察するにあたって普通のマルウェアウイルス対策ソフトについて整理してみます。マルウェアとは攻撃対象に有害な動作を行う目的で作成されたプログラムやソフトのことを示します。またマルウェアの対策としてはウイルス対策ソフトの導入うなどが挙げられます。ウイルス検知の手法としてはマルウェアや感染したファイルに見られるデータのパターンをデータベース化し、コンピュータ上のファイルに同様のデータパターンがないかスキャンを行って確認するものや未知の攻撃に対して有効なプログラムの動きを検知してウイルスと判断する振る舞い検知が挙げられます。

しかしそのどれもファイルレスマルウェアを対策するのには十分ではないと考えます。その理由としてファイルレスマルウェアはマシンに元々入ってるソフトの脆弱性を利用して不正なプログラムを走らせて攻撃する為です。

マルウェアとの違いはマシンにファイルを残さない所にありその為ウイルスソフトでの検出が難しいと考えます。

またプログラムの動作を検知する手法でも正常な動作と間違えてしまう可能性があり検知が難しくなっています。

問6

1)以下のURLからPowerShellスクリプトをダウンロードし、フラグ(フォーマット:FLAG{xxxx})を見つけてください。

https://gist.githubusercontent.com/Sh1n0g1/e42100f2a8e7d767706b4e2c88a2c45d/raw/b02088c51a4639671bf796d9f60ca56645c35146/obf.ps1

念のため以下に出題されたコードを載せます。

${-}="";${-}+=[char](-211+313);${-}+=[char](44577/381);${-}+=[char](584-474);${-}+=[char](-95+194);${-}+=[char](55216/476);${-}+=[char](-707+812);${-}+=[char](1047-936);${-}+=[char](17380/158);${-}+=[char]([int][Math]::sqrt([Math]::pow(32,2)));${-}+=[char](47034/702);${-}+=[char](-272+376);${-}+=[char](21715/215);${-}+=[char](59+40);${-}+=[char](-102+209);${-}+=[char](482-402);${-}+=[char](32592/336);${-}+=[char](-18+133);${-}+=[char](876-761);${-}+=[char](-652+771);${-}+=[char](35076/316);${-}+=[char](33516/294);${-}+=[char](96800/968);${-}+=[char](442-402);${-}+=[char](-781+817);${-}+=[char](-521+633);${-}+=[char](195-98);${-}+=[char](543-428);${-}+=[char](-586+701);${-}+=[char](90678/762);${-}+=[char](95571/861);${-}+=[char](-202+316);${-}+=[char](329-229);${-}+=[char](6068/148);${-}+=[char](86592/704);${-}+=[char](793/61);${-}+=[char](9390/939);${-}+=[char](219-187);${-}+=[char](-665+697);${-}+=[char](11234/137);${-}+=[char](67771/671);${-}+=[char](251-135);${-}+=[char]([int][Math]::sqrt([Math]::pow(117,2)));${-}+=[char](72390/635);${-}+=[char](-768+878);${-}+=[char](736/23);${-}+=[char](-867+903);${-}+=[char](651-539);${-}+=[char](44717/461);${-}+=[char](75670/658);${-}+=[char](-860+975);${-}+=[char](365-246);${-}+=[char](69264/624);${-}+=[char](-16+130);${-}+=[char](-737+837);${-}+=[char](824-792);${-}+=[char](219-174);${-}+=[char](722-653);${-}+=[char](741-628);${-}+=[char](948-916);${-}+=[char](-530+564);${-}+=[char](204-117);${-}+=[char](17442/342);${-}+=[char](58644/543);${-}+=[char](303-204);${-}+=[char](-621+669);${-}+=[char](98645/905);${-}+=[char](-905+956);${-}+=[char](519-424);${-}+=[char](73196/631);${-}+=[char](-885+933);${-}+=[char](74+21);${-}+=[char](-875+958);${-}+=[char](49011/961);${-}+=[char](-387+486);${-}+=[char](501-402);${-}+=[char](1040/20);${-}+=[char](831-722);${-}+=[char](-578+690);${-}+=[char](-454+504);${-}+=[char](-595+643);${-}+=[char](698-648);${-}+=[char](-736+784);${-}+=[char](-456+490);${-}+=[char](77-64);${-}+=[char](-261+271);${-}+=[char](-265+390);${-}|iex


$password=Read-Host -Prompt 'Input the password'
Write-Host "Checking your password..."
Start-Sleep 5
If (CheckPassword($password)){
  Write-Host "The password is correct.`nHere is the flag`n`n"
  Write-Host "+----------------------------+"
  Write-Host "|FLAG{$password}|"
  Write-Host "+----------------------------+`n`n`n"
}Else{
  Write-Host "The password is wrong!"
}

FLAG{W3lc0m3_t0_S3cc4mp2020}

2)どのように解析したかを簡潔にまとめてください。フラグが見つかっていない場合でも、分かった箇所について、解説してください。

まずスクリプトを読んだ際にchar型Unicode変換を思いつきました。またスクリプトを見た際に空の文字列にどんどん文字を追加しているように見えたのでこのコードを実行してみようと考えました。 powershellは使った事がないのでdockerでpowershellのコンテナをたて、その中で文字列をechoしました。

結果は

function CheckPassword($password){

Return $password -Eq "W3lc0m3_t0_S3cc4mp2020"

}

となっておりパスワードがわかりました。

なので下半分のコードをまた実行してパスワードを入力する事でフラグが取得できました。