Scutumとは

Scutumはクラウド型WAF
DNSでScutumに向くように設定変更するだけでWAF導入が可能
初期:98,000円、月額29,800円

### Scutumの機能
認証: 総当たり、パスワードリスト攻撃
クライアント側での攻撃: クロスサイトスクリプティング、CSRF
コマンドでの実行: SQLインジェクション、バッファオーバーフロー、OSコマンドインジェクション、XPathインジェクション、書式文字列攻撃、LDAPインジェクション、SSIインジェクション、リモートファイルインクージョン、安全でないデシリアライゼーション
情報公開: ディレクトリインデクシング、情報漏洩、パスとラバーサル、リソース位置の推測、XXE脆弱性
ミドルウェア/フレームワーク: ShellShock, Apache2 Struts2, POODLE攻撃、SSL BEAST攻撃、HTTPリクエストスマグリング
マルウェア拡散: ドライブバイダウンロード攻撃
サービス運用妨害: DDoS攻撃

なるほどー 攻撃から守るってのは受け身やな

IDS/IPSとは

不正侵入を検知・防御するシステム
IDS・IPSではファイアウォールでは実現できない対策が可能

IDSはIntrusion Detection Systemの略で、ネットワークに対して不正なアクセスがないかをリアルタイムでチェックして、疑わしい内容があれば管理者へ通知を行う

### ネットワーク型
ネットワーク型はネットワーク上に設置し、パケットを監視する

### ホスト型
監視対象のサーバなどにインストールして使われるタイプ

### シグネチャ型とアノマリ型
シグネチャ型は、異常なアクセスのパターンを予め登録しておき、通信内容とそれが一致すれば不正と判断する検知方法
アノマリ型とはシグネチャ型と反対で、正常なアクセスパターンを事前に登録しておき、登録済のパターンと大きく異なるアクセスを見つけた場合は不正と判断する手法。

### IDS/IPSの効果
DoS攻撃、Synフラッド攻撃などに有効
ファイアウォールでは異常と検知されないものでも、パケットの内容からIDS/IPSでは検知が可能

### WAF(Web Application Firewall)
WAFはWeb Applicationに特化しているが、IPSはサーバ・ネットワーク全体

IDS/IPSはパケットの中身までチェックする

### Linuxで使えるホスト型IDS
Tripwire
http://www.tripwire.org/

$ sudo apt -y install tripwire

なんかすごいな

### WorkLoadSecurity
Trend Microの製品
$ sudo dpkg -i
開始: /etc/init.d/ds_agent start
停止: /etc/init.d/ds_agent stop
リセット: /etc/init.d/ds_agent reset
再起動: /etc/init.d/ds_agent restart
表示ステータス: svcs -a | grep ds_agent

なるほどな、インフラのこと、完全に見誤ってたわ
これは凄いわ

BGPルータとは

BGPとは、複数の独立したネットワークを接続したTCP/IPネットワークにおいて、ネットワーク間の経路情報を通信機器間で交換する手順を定めたプロトコル(通信規約)の一つ。
BGPは異なるAS間を結ぶ境界上のルータ同士がAS単位の経路情報(自ASが他のどのASと繋がっているか等)を交換するeBGP(exterior BGP)と、AS内のルータ間でAS間経路の情報を交換するiBGP(interior BGP)で構成される。

ルーティングプロトコルにはIGBとEGPがある
1. 同じ縄張りの中で情報交換: IGP
2. 縄張りを跨いで情報交換: EGP … EGPの中にBGPルータがある(Border Gateway Protocol)

### AS(Autonomous System)
共通のポリシーや同じ管理下で運用されているルータやネットワークの集合体を意味する
各AS内では独立したIGPやポリシーが運用されている
ASを識別するための番号がAS番号 JPNICが割り当ての代行を行なっている
16ビット(1~65535)の数字を用いる

### BGPルータ
BGPはASの経路交換のパス 
通常は短いものを最短ルートとして使用する

### BGPの仕組み
2台のルータ間でTCP(ポート番号179)による接続を行い経路情報を交換
隣接ルータをネイバー、ピアと呼ぶ
1対1のセッションを確立し、その上でBGPの基本情報、お互いのルータが知っている経路情報を交換
ルーティングテーブルが更新された場合は、経路情報を交換
KEEPALIVEメッセージをアナウンスしあうことでルータの生存確認を行う

### パス属性
ORIGIN
AS_PATH(ASパス)
NEXT_HOP
MULTI_EXIT_DISC
LOCAL_PREF
ATOMIC_AGGREGATE
AGGREGATOR
COMMUNITY

AWS EFSとは?

Amazon EC2(1台目) -> Amazon EFS(NFSマウント) -> Amazon EC2(2台名)

### EFSとは
マネージドサービス
一部で障害が起きたとしても、NFSが利用できなくなったり、NFSに保存したデータが消失したりすることを防止することができる
ストレージ容量は保存するファイルサイズ合計によって自動的に伸縮する

### 料金体制
標準ストレージクラスと低頻度アクセスストレージクラスの2つのストレージが用意されている

### S3との違い
ファイルストレージというタイプのストレージでOSでマウント可能なファイルシステム
S3はHTTPSなどでアクセス可能なエンドポイントを提供する

### demo
IAMでAmazonS3FullAccess, AmazonVPCReadOnlyAccess, AmazonEC2ReadonlyAccessを付与

$ ssh -i “~/.ssh/HOGEHOGE” -p xxxxx USER@FQDN
$ aws configure
$ cat .aws/config
[default]
output = json
region = ap-northeast-1
$ aws ec2 describe-vpcs

### NFSの作成
$ aws efs create-file-system –creation-token my-file-system
{
“SizeInBytes”: {
“ValueInIA”: 0,
“ValueInStandard”: 0,
“Value”: 0
},
“FileSystemArn”: “arn:aws:elasticfilesystem:ap-northeast-1:*:file-system/fs-*”,
“ThroughputMode”: “bursting”,
“CreationToken”: “my-file-system”,
“Encrypted”: false,
“Tags”: [],
“CreationTime”: 1646730547.0,
“PerformanceMode”: “generalPurpose”,
“FileSystemId”: “fs-*”,
“NumberOfMountTargets”: 0,
“LifeCycleState”: “creating”,
“OwnerId”: “*”
}

FileSystemIDをメモっておく

### mount target
aws efs create-mount-target –file-system-id ${filesystemId} –subnet-id ${submnetId} –security-groups ${sgId}

{
“MountTargetId”: “”,
“VpcId”: “”,
“AvailabilityZoneId”: “apne1-az1”,
“NetworkInterfaceId”: “eni-*”,
“FileSystemId”: “fs-*”,
“AvailabilityZoneName”: “ap-northeast-1c”,
“LifeCycleState”: “creating”,
“SubnetId”: “subnet-*”,
“OwnerId”: “*”,
“IpAddress”: “*”
}

### package インストール
$ sudo yum install -y nfs-utils
$ sudo mkdir ~/efs
$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-*.efs.ap-northeast-1.amazonaws.com:/ ~/efs
$ sudo sh -c ‘echo “Hello Amazon EFS” > /home/ec2-user/efs/test’

なるほどー、冗長化してもEFSでマウントして同じものを見るのか…
仕組みは理解した

AWS WAFを理解する

WAFとは? … ALBまたはCloudFrontのオプションの様な形で動作する

### どのルールグループを使うか
ALBやCloudFrontに適用するには、WebACL(Web Access Control List)という単位になる
このWebACLにどの様なアクセスを不正アクセスとみなすかルールを適用する
※基本的には既に用意されたルールセットから選択する。組み合わせることも可能
※WCUは合計キャパシティが1500まで

パターン1) AWSマネージドルール・ルールグループ
コアルールセット
管理者保護
即知の不正な入力
SQLデータベース
Linux OS
POSIX OS
Windows OS
PHPアプリケーション
WorPressアプリケーション
PHPアプリケーション
WordPressアプリケーション
AmazonIPレピュテーション
匿名IPリスト

パターン2) AWS以外のマネージドサービス

パターン30 AWS WAFセキュリティオートメーション
ブロックするIPアドレスなど

パターン4) WafCharm

実際にコンソール画面から試してみる

なるほど、ALBにattachできるのね。

AWS Direct Connect構築の整理

AWS Direct Connect接続するには一般的にプロバイダーを介して契約することが多い

### 回線帯域
– 帯域保証
— 契約した帯域分はスピードが出る
– ベストエフォート
  – 常に最高効率で通信が行われる訳ではないが値段が安い

### Direct Connect接続型
– 専有型
— DXポートを自社のAWSアカウント上で予約して、そのポートへプロバイダーから繋いでもらうプラン
— 接続単位での提供
– ホスト型
    – 1Gbpsも使わない場合など、契約プロバイダーが予めDXポートを繋いでいるプラン
        – 接続単位での提供(ただし作れるVIFは一つのみ)
         - 仮想インタフェース単位での提供

### Direct Connect料金
– AWSへ支払うもの
— DXポート料金
— DXポートを介して通信した分の通信料金
– データセンターやプロバイダーに支払う費用
— 構内配線費用
— 契約プロバイダーへのサービス料金

なるほどー 契約形態はわかったが、仕組みがようわからん…

CloudWatch Logsを使いたい

### CloudWatch Logsの主な機能
– インスタンスやサービスログの蓄積
– ログのモニタリング
– ログのフィルタリング
– ログデータのアーカイブ
– ログデータの分析
– ログのアラート化

### IAMロールの作成
AWS Service -> EC2 -> Add Permissionで “CloudWatchLogsFullAccess” をつける -> role nameはそのまま”CloudWatchLogsFullAccess” にする

### roleをattach
Modify IAM roleで作成した”CloudWatchLogsFullAccess”をroleにつける

sshログインしてapache2を入れる
$ sudo yum install httpd
$ sudo systemctl start httpd
$ sudo systemctl status httpd
$ sudo systemctl enable httpd
$ sudo systemctl is-enabled httpd
$ httpd -v

public ipを叩き、ipが入っていることを確認

cloudwatch logsエージェントインストール
$ sudo yum install -y awslogs

/etc/awslogs/awscli.confがconfファイル。us-east-1になっているので、ap-northeast-1に変更する
$ sudo cat /etc/awslogs/awscli.conf

[plugins]
cwlogs = cwlogs
[default]
region = us-east-1
[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-1

$ sudo cat /etc/awslogs/awslogs.conf

[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/messages

fileで対象となるログファイルを指定する
buffer_duration: ログイベントのバッチ期間

apacheエラーログを追加

[Apache_AccessLog]
log_group_name = TestSV_Apache
log_stream_name = {instance_id}_accesslog
file = /etc/httpd/logs/access_log
datetime_format = %a %b %d %H:%M:%S %Y
initial_position = start_of_file
buffer_duration = 5000

[Apache_ErrorLog]
log_group_name = TestSV_Apache
log_stream_name = {instance_id}_errorlog
file = /etc/httpd/logs/error_log
datetime_format = %a %b %d %H:%M:%S %Y
initial_position = start_of_file
buffer_duration = 5000

amazon linux2 amiの場合
$ sudo systemctl start awslogsd

CloudWatch Logsで確認するとログが出力されている

なるほど、これをS3に転送するのね
なんか凄いことになってるな

CloudWatch基本項目

CloudWatch基本事項
– Namespace
– Metrics
– Time stamps
– Dimensions
– Statics
– Alarms

### Namespace
複数のメトリクスをまとめてコンテナ(箱)で管理する概念
異なる名前空間のメトリクスは相互に切り離されている

### Metrics
ある時間ごとのデータポイントのセット
作成されたリージョンのみ存在
メトリクスの保持期間がある

### Time stamps
メトリクスデータポイントの必須情報

### dimension
メトリクスを一意に識別する名前/値のペア

### Statistics
指定した期間のメトリクスデータの集計

### Alarms
指定した期間の単一のメトリクスを監視

### アラームの作成
CloudWatchの画面でアラーム作成

Metrics Name, Image ID, Statistic, Periodを選択

うむ、中々素晴らしいですね。

CloudWatch入門

CloudWatchとは?
-> AWSのリソースやアプリケーション、オンプレミスのサーバをモニタリングするためのマネージドサービス
-> 監視そのももの機能以外にアラーム通知、イベント検知、可視化などの機能がある

### CloudWatchメトリクス
メトリクスとは、システムのパフォーマンスに関するデータ
監視対象のリソースからメトリクスを収集することで監視を行う
CloudWatchメトリクスでは、まず名前空間という単位でグループ化される
その中でディメンション(=名前と値)の組み合わせごとにグループ化される
※統計、期間、ディメンション、標準メトリクス

### CloudWatch Logs
ログファイルの監視と保存を担う機能
AWSサービスやオンプレミスサーバからエージェント経由でログメッセージをCloudWatchエンドポイントに転送することでログデータの保存が出来る。ログデータは保存期間として1日~永久保存を選択できる
ロググループというログのグループ単位があり、その中にログストリームというグループの単位があり、その中にログイベントが保存
Kinesis Data Streams, Kinesis Data Firehose, Lambdaに配信できる
S3に保存するとコストを抑えられる

### CloudWatch Event
AWSリソースの状態が変化した場合にアクションを実行できる

アラームの設定
– 対象のメトリックス
– 統計方法: 平均、最大、合計などの中から適切な統計方法を選択
– 期間: 何分単位に1回メトリクスを評価するのか設定

### CloudWatch Dashboard
複数のログやメトリクスを一つの画面で確認することができる

実際に、CloudWatchメトリクス、CloudWatch Logs, CloudWatch Alarms、CloudWatch Eventを一つずつ使ってみないとわからんな…