セキュリティ
体系的に学ぶ 安全なWebアプリケーションの作り方
Fixing a Memory Leak in a Production Node.js App
MERCURY and DEV-1084: Destructive attack on hybrid environment
pythonで脆弱性判断
「情報セキュリティマネジメント入門」
セクション1(学習を始める前に)
コース概要
1.情報セキュリティについて
2.環境構築
3.ネットワークの基礎知識
4.パケットスニッフィング
5.サーバーハッキング(ブルートフォース攻撃)
6.まとめ
情報セキュリティのCIA
機密性:アクセスコントロール
完全性:情報がなくなっていないか、改ざんされていないか
可用性:システムが停止せずに稼働しているか
情報セキュリティはコストである
・セキュリティ機器の購入
・業務手順の増加
など
コストと成果のバランスを保たねければならない
投資対効果を最大にする
・情報資産を定義する
・リスクをミニマムにしたい
・脆弱性は明らかなリスク
脅威について
1、物理的脅威
2、技術的脅威
3、人的脅威
人的脅威がセキュリティ事故の80%である、誤操作など
脆弱性
セキュリティホール、ソフトウェアの欠陥、運用ミス
セキュリティインシデント(事故)
対策
セキュリティパッチを当てる
サービスが止まらないように別のH/Wでテストする
CVE:
JVN:脆弱性識別番号
セキュリティ診断(ペネとレーションテスト)
公開されているwebサーバの30%以上に脆弱性がある
テスト
・ブラックボックステスト
・ホワイトボックステスト
・グレーボックステスト
対象:webアプリ、サーバー、データベース、無線LAN、スマフォアプリ、認証システム
脆弱性診断
ペネトレーションテスト:シナリオを作成してシナリオ通り攻撃して侵入できるか
セクション2 環境構築
Kali linuxを用意する
セクション3 ターゲット情報の調査
tracerouteでファイアウォールを確認
ポートを介さないファイアウォールがあるとそこで途切れる
nmapでポートスキャンができる
さらに詳細な情報を集める
特定のネットワーク上にどんなマシンがあるか把握できる
セクション4 データキャプチャ
TCPのクライアントを立ち上げて通信をする
socketをimportして、クライアントを立ち上げることができる
これを見れるようにしたものをwebブラウザである
URLクライアントからサイトにアクセス
セクション5 Webサーバーへの辞書型攻撃
サイトのファイル構成を確認する
ファイル構成がわかっているとアタックしやすい
ログインページについて字書型攻撃をしてみる
HTMLの知識が必要
Pythonでブルートフォースのコードを書いてみる
セクション6 Metasploitを使ってみる
VMを作ってmetasploitを使ってみる
セクション7 ボーナス
--------------------------------------------
「ホワイトハッカー入門」
セクション1 はじめに
ホワイトハッカーになるために必要な基本事項
知識:OSやネットワーク、セキュリティ、攻撃者、攻撃手法、リスク評価手法や脆弱性診断手法、インシデント対応や運用手順
技術:OSやPCの基本的な操作、プログラミング技術、各種攻撃の仕組みの理解、各種ツールなどの使用方法、セキュリティへの応用など
倫理観:法律や規制、セキュリティポリシー、価値観
ここで紹介する攻撃などは自分で管理している(ローカル)ネットワークのみに行うこと!」
Kali Linuxを使う
セクション2 情報セキュリティとホワイトハッカー
ホワイトハッカーは攻撃手法だけでなく、防御手法を学ぶ
過去の事例を学ぶのが良い
脆弱性を評価するのが大切
脆弱性を評価するのがペネトレーションテスト


偵察→スキャニング→アクセス権の取得→アクセスの維持→痕跡の消去
ホストへの攻撃:サーバへの攻撃、後処理、マルウェア
ネットワークへの攻撃:DoS攻撃、ネットワーク盗聴
アプリケーション:Webアプリケーション攻撃
セクション3 情報収集概論
直接アクセス
検索エンジン
ソーシャルエンジニアリング
列挙を使う
いろんなものを列挙して考える
セクション4 偵察技術
ドメイン情報→whoisみたいなサイトから調べられる
ipアドレスがあれば、whois gatewayからnslookupで調べられる
現在、DNSから情報はあまり得られない
検索エンジンで特殊な検索の仕方をマスターせよ
セクション5 スキャニング技術
ping sweep
nmap -sn -PE ip範囲でping sweepができる
IPアドレスの範囲から起動しているマシンをリストアップする
traceroute ipで接続ルートの探索ができる
デフォルトでUDP
ネットワークの論理構成や物理構成が予測できる
ポートが開いているかどうかは繋いでみれば良い
ポートの数は65536、ウェルノウンだけで1024こ
ログが残ってしまう
代表的にはnmapやhping3がある
代表的なTCPスキャンには接続スキャンがあるが、ログが残る
Synスキャンも信頼性が高い
TCP接続は3way hand shake
つまり最後までやらなくてもポートが開いているかどうかわかる
TCPクローズドポートスキャンがある
synフラグではないパケットを投げたらどうなるかというスキャン
クローズドポートを特定できる
ACKスキャンはACKフラグを立てたパケットを送信し、RSTの内容をみる
Firewallの有無を調べられる
Idleスキャン
フラグメント識別番号を利用して身元を隠しながら行えるテクニック
ゾンビマシンの選定が重要
UDPスキャンはパケットではなく、接続要求をする
あまり有効ではない
サーバーのフットプリティングでOSが予測できる
サービスによっては
smtpの列挙の可能性と脆弱性の有無
sslの脆弱性など
脆弱性情報などのサイト
nvd
jvn
セクション6 サーバへの攻撃
認証の突破
パスワード認証
THC-Hydraというソフトが便利
認証突破の失敗はログに残ってしまう
情報収集が大切
脆弱性の攻撃方法
metasploit
オープンソースのツール
脆弱性情報の収集に非常に使いやすい
set LHOST 攻撃pcのip
set RHOSt ターゲットの
set TARGET URI
exploit
攻撃が成功すると取得できる
権限昇格
管理者権限の取得が目的
バックドアの作成やログの消去は管理者権限の取得が必要
ローカルからしか攻撃できない脆弱性はたくさんある
アクセスしているOSに依存するのである程度のOSの知識は必要である
アクセス先で攻撃スクリプトを実行
バッファオーバーフローという攻撃をする
セクション7 DoS攻撃
DoS攻撃:Denial of Service
ユーザへのサービス低下によりターゲットに対する経済的損失や信用失墜を目的とする
応用すると、カモフラージュ、捜査誘導、痕跡処理に使える
・帯域幅消費
帯域幅を多量のリクエストで消費
・システムリソース消費
CPUやリソースに負荷をかける
・アプリケーションロジックエラー
アプリのロジックエラーをついて無限ループなどを起こす
IPスプーフィング:特定を阻害し、攻撃の効果を増幅
帯域消費方DoS
通常のリクエストパケットなどを送る
パケットの送信方法を工夫したり、数で勝負したりする
SYN-flood攻撃
接続テーブルはACKが返るまで一定時間保持されるので、接続テーブルをめっちゃ増やさせる
そうすると、接続できなくなる
増幅系攻撃
IPを偽装し、ブロードキャストアドレスを指定する
510のパケットが送られる
アプリケーションロジックエラー
ping of death:65535byteを超えるping
E-mail bombing:大きなメールでメールサーバのリソースを停止
WinNuke:139/tcpにOOBを送る
今までの攻撃は、firewallなどで見つかるのでほとんど使えない
DDoS攻撃:複数のマシンから同じターゲットにタイミングを合わせてパケットを送る
ゾンビからターゲットに攻撃させる
ボット:DoS攻撃を行うよう設定されたプログラム
ハンドラ:複数のボットをコントロールするプログラム
攻撃者はハンドラを通してボットに指令
感染手法は、マルウェアと同じ
・トロイの木馬
・フィッシング
・ファイル添付
・直接挿入
・脆弱性の利用
DDoS攻撃はペネトレーションテストで試すことが少ないので、防御が難しい
DoS攻撃の活用
・攻撃段階
リアルタイム監視などに有効
発見されることを逆手に取る
カモフラージュに使える
IPアドレスを拡散させることで捜査を拡散できる
・保守段階
権限昇格できない場合の痕跡の消去
IPスプーフィングが重要
内部IPの利用やグローバルIPを利用したりして捜査を混乱させる
セクション8 Webアプリケーション攻撃
一般への公開が目的
リスクの増大
httpというプロトコルはwebページに向いていない
様々な形式による情報を扱う、XML、JSONなど色々
HTTPには問題があるので、Webエンジニアが脆弱性がないものを作らなければいけない
つまり、アプリケーションの数だけ脆弱性がある
脆弱性のほとんどは制作者のミス
・サーバーサイド攻撃
サーバーの乗りとりなどを狙う
・クライアントサイド攻撃
Webアプリケーションを利用してクライアントに攻撃
攻撃に対する無知、クロスドメイン制約、単純ミス、開発言語、仕様、Webサーバ構築などいろんなことから脆弱性が生まれる
入力値の検証ミスやエラー値の表示
入力値の検証不備
ヘッダインジェクション
QSインジェクション
SQLインジェクション
ディレクトリトラバーサル
オープンリダイレクト
クロスサイトスクリプト
エラー情報の表示
サーバーのフットプリンティング
SQLインジェクション
有効なログインアカウントの列挙など
SQL対策不備
SQLインジェクション
使用の不備や無計画な実装
ログインアカウントの列挙
クロスサイトリクエストフォージェリー
クリックジャッキング
セッション問題など
その他
ロジックの不備によるDoS
MXインジェクション
通信の暗号化
SSLの問題など
対応方法が変わる攻撃手法
クロスサイトスクリプトだと、データ通信方法、アプリケーション側ロジック、発言箇所で変わる対策など
Webアプリの情報収集
・フットプリンティング
URLを見る
ssl、Aspxで開発、DB使用の可能性など
エラーページに飛ぶと、バナー情報が出ることがある
SSL証明書のチェック
隠されたコンテンツとして、robots.txtやサンプルCGIをみる
・攻撃の情報
エントリポイントの特定
リクエスト時のパラメータ
パラメータなど
BurpSuite Proxyというツールが良い
入力値の戻り値の確認
ファイルの関するパラメータ
ファイル
リダイレクト
DB使用の有無
入力値チェック
このように収集した情報から攻撃手法を検討する
Webアプリケーション攻撃における代表的な手法を最新テクニック
・クロスサイトスクリプト
ユーザが入力した値をレスポンスに含めるとき、タグやスクリプトをそのまま表示する脆弱性を利用
レスポンスの場所によって有効なものが異なる
対応策はサニタイズ
・SQLインジェクション
ユーザが入力した値を適切に検証せずにプログラムが発行するSQL構文の中に含めてしまうことで攻撃者が任意にDBを操ることができる
認証突破、機密情報の漏洩、データの改竄など
・セッションハイジャック
WebアプリはセッションIDでユーザを識別している
他人のセッションIDがあれば簡単になりすましができる
ブルートフォース
推測
セッション固定
盗み出す
セクション9 アクセスの維持
いつでもそのホストにアクセスできるようにすること
パスワードの変更や、脆弱性の修正などがある
バッファオーバーフローでは脆弱性をシェルに置き換えられたらもう無理
アクセス権の維持するには、バックドアを仕込むのがほとんど唯一
・設計開発段階で組み込まれるバックドア
これを外す忘れることがある
・開発者が勝手に作ったバックドア
・政府の諜報機関によるバックドア
・攻撃者によるバックドア
(攻撃者の)バックドアの種類
・ユーザアカウントの追加
既に認証系のサービスがある
新しいユーザを作成し、管理者権限を与える
sudoersファイルを書き換える
ファイルに記述が残るし、ログインごとにログが残る
・既存サービスの起動
nc (netcat)を使う
汎用TCP/UDP接続コマンドラインツール
スーパーサーバ型デーモン
認証系サービスの起動
service ~名前 start
r系サービスというものがある(rsh, rlogin, rcopy, rcmd)
・サービスの追加
ネットワークにつながっていれば簡単にインストールできる
・ルートキット
バックドアの隠蔽をする(紛らわしい名前、既存のサービスの改竄、LKM型ルートキット)
アクセスの維持に使用されるツールのセット
バックドア
スニファ
ロガー
隠蔽の手段
がセットになっている
アプリケーションレベルとカーネルレベルがある
カーネルレベルではカーネルを改変
バックドアは目的上、ポートのListenが必要
どれだけ巧妙に隠しても外部からの応答に
ルートキットの検出
HIDSなどによる生合成のチェック
chkrootkit
rkhunter
などという検出プログラムを使うこともある
セクション10 痕跡の消去
後処理の必要性
アクセスしたログの消去
作成したツール類や一時ファイルの消去
履歴やCookieといった痕跡の消去
一時的に変更した設定の復元
など
ログの消去
テキストが書かれたログ
・Syslog
ログメッセージをIPネットワーク上で転送するための標準規格
/etc/syslog.confなどを確認する
@ホスト名があったら外部に転送されている
sedコマンドを利用して特定の語句を含まれる行を一括削除できる
IPアドレスのログに記載されているPIDを抜き出しPIDに対してsedを行うのが良い
・Apacheログ
バイナリで書かれたログ
バイナリエディタの使用かツールを使用する必要がある
・lastlog
・Windowsのイベントログ
カモフラージュ
ログが消去できない時はカモフラージュを考える
ログを塗りつぶすしかない
ログにはローテーションという仕組みがある
バックアップしたログは履歴保管
/etc/logrotate.confで行われている
logger -t アプリケーション名 ログ内容
設定などを調べた上で有効な方法を選択せよ
セクション11 ネットワーク盗聴
スニッフィング(ネットワーク盗聴)
・受動的盗聴
イーサネットは同一コリジョン内でデータを共有
通常はNICが自分以外の通信を遮断する
プロミスキャスモードにすることで自分宛以外の通信を読み取れる
今はスイッチングハブなので、通信の経路を判断してそれ以外のポートに通信を流さないのでこれはできない
・能動的盗聴
スイッチはCAMテーブルで宛先を判断している
MACアドレスと物理的なポートを紐づけている
arpはその答えが正しいか判断できないので、ARPとMACを誤認させる
・ルーティング
攻撃者の用意したホストを経由するようにターゲットを誘導する
wi-fi不正アクセスポイント
不正プロキシサーバ
ユーザのネットワーク設定書き換え
・無線盗聴
無線電波を直接傍受する
暗号化されている時はそれを解読する
受動的盗聴、能動的盗聴は基本的に同じネットワーク上でしか行えないがルーティングや無線盗聴にその制限はない
盗聴ツール
・スニファー
tcpdumpやwireshark
ネットワーク上を流れるパケットから目的のパケットを絞り込む
NICのプロミスキャスモードを有効にする
ターゲットと同じハブに接続する
スニファーを起動してパケットをみる
・パケットキャプチャー
・プロトコルアナライザ
ARPポイズニング
ARPをスプーフィングしてターゲットネットワークのARPテーブルを汚染する
Cain&Abelというハッキングツールを使う
MITMとなる
Cain&Abel起動
NIC選択
MACアドレススキャン
対象を選択してARPポイズニング開始
WireShark起動してftp通信を盗聴
パケットの読み方とスニファーのフィルタリングテクニックを覚える必要がある
ルーティングについて
指定したルータを経由するように設定する
ルータ上を通過するパケットは見える
・Wifi不正アクセスポイント
wifi端末が接続するAPを立てて繋いできた人をみる
紛らわしい名前をつけ、パスワードをつけないなど
・不正プロキシサーバ
プロキシサーバを構築し、無料プロキシサーバとして宣伝する
繋いできたユーザの通信を盗聴できる
・ネットワーク設定の変更
直接やるか、マルウェアを使う
ただ、普通にマルウェアを侵入できるならhostsファイルを変更すればええやんけ
デフォルトゲートウェイ、同一ネットワーク上に作れる場あい
プロキシ
ネームサーバ
セクション12 マルウェア
ウイルス、ワーム、ボット、ランサムウェア、バックドア、ルートキット、スパイウェアなど
ウイルス:自己複製して他のプログラムに感染する
ワーム:自己複製するが、他のプログラムには感染しない
ランサムウェア:ファイルやフォルダを暗号化して、金を要求
スパイウェア:システム上のユーザの挙動を盗む、カメラや通話など
アドウェア:広告を表示するソフトウェア、よくある
プログラムができる人ならすぐ作れる
感染の手法
マルウェアの価値は内容より感染手法にある
・送る
メールなど
アダルト系や儲け話、取引系で開かせる
WannaCryやCodeRedは脆弱性を使って送り込む
・ダウンロード
人気のあるアプリなどに仕込む
パッチに仕込む
追加モジュールなどに仕込む
セキュリティソフトを装う
トロイの木馬
直接ユーザ自身のインストールさせる
本来無害なプログラムにマルウェアを仕込む
・直接インストール
直接ターゲットのPCにUSBなどを繋ぐ
セクション13 ソーシャルエンジニアリング
他人を操り、その人が持っている情報を聞き出したり権限を使う
セキュリティを構成する要素の中で人が最も弱く漬け込みやすい
検出が困難
完全な回避が困難
故に重要である
直接情報を盗むだけでなく、偵察として使われる
・なりすまし
・直接赴く
・スピアフィッシング
セクション14 その他
無線ネットワーク
Wi-Fi
IEEE 802.11に基づくWLAN
SSID
サービスセットID、アクセスポイントを識別するための名前
暗号
WEP
WPA
WPA2
-personal
-enterprise
WPA2-enterpriseを使うべき!他は脆弱性がある
不正使用
APのスキャニング
SSIDや接続もわかる
専用のツールを使えばどこら辺にあるか調べられる
不正使用可能なAPをマークして共有する
無線盗聴
無線経路上のデータを傍受し、暗号を解読する
WEPは簡単にツールで解読できる
不正AP
APモードのあるアプリケーションWireSharkなどのスニファーがあればOK
スプーフィング
・IPスプーフィング
接続もとIPアドレスを偽装する
レスポンスを確認する必要のある攻撃には使えない
・MACスプーフィング
MACアドレスを偽装
MACアドレスによるフィルタリング回避、ARPポイズニング、CAM攻撃、DHCPに対する攻撃などに使われる
実MACアドレスを書き換えて、元々のアドレスを忘れてしまうと通信ができなくなる
・ARPスプーフィング
・DNSスプーフィング
クラウド
・インフラストストラクチャ(Iaas)
仮想マシンやハードウェア
・プラットフォーム(PaaS)
開発環境
・サービス(SaaS)
サービスなど
仮想マシン
資源の共有からなるサイドチャネル攻撃
CPU、メモリ、ネットワーク
ネットワーク共有による問題
ホストOSへの侵害
資格
CEH
米国国防省の防衛指令によって国防総省の情報システムにアクセスする全てのスタッフが持っていなければならない必須の資格
CND
現状のニーズに最もマッチしている
ネットワークエンジニア向けの資格
この2つが揃えば最高!
トレーニングセンターがある
情報安全確保支援士
セキュリティスペシャリストを国家資格としたもの
グローバル的には評価されていない
CISSP
グローバル的に評価されている
マネジメント
Comp TIA Security+
実務能力を評価する
EUサイバーレジリエンス法
LLMに脆弱性を検出させる
LangCheckを使ったLLMアプリケーションの自動レッドチーミング