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