出典:魁!!男塾
こんにちは、Nanayakuです。
今回は、サイバー攻撃について解説していきます。
サイバー攻撃とは
コンピュータシステムに対し、ネットワークを通じて、データの破壊・搾取・改ざんを行うことです。
目的
金銭・愉快犯・組織犯罪・産業スパイ
攻撃者
犯罪者・諜報員(スパイ)・ハッカー集団・悪意のある職員(退職者も)
原因
インターネットに関する法律が整備されていない(誹謗中傷の書き込みを消す場合、訴えた側が不利)
国際的な解決が必要(法律・環境)・・・海外からの攻撃は日本の警察ではどうにも出来ない
ポートスキャン
全てのポートに信号を送り、通信に利用可能なポートを探すことです。
目的
既知のセキュリテイホールを持つサービスの発見。(そこから侵入)
パスワードクラック
推測、総当たりなど、パスワードに関する攻撃のことです。
攻撃の種類
オンライン・・・パスワードを試し、ログインをする
オフライン・・・パスワードが書いてあるリソースを盗む
類似した攻撃
リバーシブルートフォース攻撃・・・パスワードを固定してIDを探す
パスワードリスト攻撃・・・複数のサイトで同じパスワードを使う
対策
- 推測困難なものにする。定期的に変える。
- ワンタイムパスワード方式、クラックが困難な方式(指紋認証など)
- ファイルやデータベースへのアクセス権の確認、強化
セッションハイジャック
Webサーバーとクライアント間のセッションに割り込んでデータを奪い取る。
セッションの管理情報(URL・クッキー・hiddenフィールド)が盗まれる。
例)
受付番号を盗まれ、他人が自分になりすまし情報を盗む。
原因
- セッションIDが単純で推測、偽装されやすい
- セッション情報が丸見え
- 暗号化されていない
- XSSの脆弱性
対策
- SSL/TLSを利用して暗号化(他人が干渉できないようにする)
- 自社でセッション管理システムを開発せず、フレームワークを使う
- 乱数やハッシュ関数で推測困難なセッションIDを生成
- セキュリテイ検査をして対処する
- 悪意のある攻撃があることを前提にアプリを構築する
- リバースプロキシやWEF(Web Application Firewall)の設置
不正な命令を実行させる攻撃
(ユーザーの入力データを処理するときに発生)
XSS(クロスサイトスクリプティング)
HTMLの文法を使った攻撃で、反射型XSS・格納型XSS・DOMベースXSSなどがある。
XSSから守るための考え方
ユーザーからの入力値を絶対に信用しない
=>HTMLやスクリプトはクライアント側で自由に書き換えられる可能性があるから。
XSSを使った手口
フィッシング・・・個人情報を盗み出す詐欺行為
標的型攻撃・・・組織や団体を標的に、取引先などを装い不正のリンクを送信して情報を盗む手法
クリックジャッキング・・・透明化したレイヤ(ボタンなど)を重ねて配置し、視覚的に騙して不正捜査をさせる手法
対策
レスポンスヘッダのContent-Typeフィールドに文字コードを指定する。
- UTF-7 =>UTF-8
- +ADw- => <
- +AD4- => >
エスケープ処理。
タグの属性を必ずダブルクォーテーションで囲む。(文字列化)
SQLインジェクション
不正なSQLを発行することです。
SQLで使われる文字列を使った攻撃です。
例)
パスワードがTRUEとなるように文字列を入力し、SQL発行をする。
=> password=1234
=> password="OR 1
=1
OSコマンドインジェクション
ユーザーの入力値をもとに、ファイルを操作するような処理を行うことです。
ターミナルのコマンドを使った攻撃です。
system()やexec()などプログラミング言語によって、OSコマンドを呼び出せる関数があります。
対策
- OSコマンドを実行する仕様にしない。
- 入力データの文字種や書式のルールを明確化し制限する。
- 入力データのチェック。
HTTPヘッダインジェクション
ユーザーの入力値をもとに、HTTPレスポンスを不正データで任意のヘッダを追加し、レスポンスの分割したりする攻撃です。(Set-Cookie、Location)
自分の住所(IPアドレス)じゃない宛先に荷物を送るイメージです。
対策
- URLエンコード。
- レスポンスの動的生成は行わない。
- 改行コードのチェックする。
メールヘッダインジェクション
不正なメールヘッダを混入させて、意図しないアドレスに迷惑メールなどを送信する攻撃です。
対策
- メールヘッダ(送信先)は固定する。
- 改行コードのチェック。
- ユーザーが意図してメールを送信できるような機能にしない。
ディレクトリラバーサル攻撃
不正な入力値によって、公開を意図していないWebサーバー内のファイルにアクセスする攻撃です。
相対パスを示す文字列・・・"../../etc/password"
対策
- 関数を使って文字列からディレクトリ名を取り除く。
- 不正の文字列をチェックし取り除く。(.//..\)
CSRF(cross-site request forgeries)
ユーザー認証やセッション管理の不備について、クライアントに不正な処理要求を行わせる攻撃です。
例)
- 不正な注文をさせる
- 不正なパスワードに強制変更する
- 強制的にサービスから退会させる
対策
- POSTメソッドを使用して、hiddenフィールドにランダム値をセットし一緒に送信する。
- 確定処理の直前に再度パスワードを入力する。
- Referrerを用いてリンク元の正当性を確認する。
- 重要な操作の後で内容確認メールを送信する。
重要
正しいフレームワークの使い方をすれば、ほとんどのセキュリティを対策する必要な無くなります。
一回はrailsガイド(railsセキュリティガイド)を読みましょう。
最後に
備忘録がわりに作ったので、間違っている所とかあったら、コメントくれると嬉しいです。