コーヒーが好きな emi です。
Amazon GuardDuty RDS Protection で Tor IP 検出タイプと Malicious IP 検出タイプを検知することができましたので、その結果をご紹介します。
検証で検出できなかった検出タイプはサンプルを出力しました。
GuardDuty RDS Protection とは(おさらい)
GuardDuty RDS Protection は、Aurora MySQL と Aurora PostgreSQL に対するログインアクティビティを監視し、不審なログイン試行を検知する機能です。
詳細は以下ブログで紹介しておりますのでご参照ください。
検出結果
今回検出に成功したのは以下の検出タイプです。
- CredentialAccess:RDS/TorIPCaller.SuccessfulLogin
- CredentialAccess:RDS/TorIPCaller.FailedLogin
- Discovery:RDS/TorIPCaller
- Discovery:RDS/MaliciousIPCaller
今回、故意に Tor IP 関連の検出タイプ各種を検出させるため、Tor クライアントを準備をしました。
Tor の概要
Tor(トア、The Onion Router)は、匿名通信を可能にするソフトウェアです。トラフィックを複数の中間ノードを経由してルーティングすることで、通信元を特定することを困難にします。Tor ネットワークを経由して最終的に通信相手となる Web サーバーやネットワーク機器を Tor 出口ノードといいます。
今回 Tor IP 関連の検出タイプ各種を検出させるために、別の AWS アカウントで Tor をインストールした EC2 インスタンスを用意しました。
これで検証用に構築した Aurora にログイン試行し、GuardDuty RDS Protection に検出させます。
というわけで、今回検出できた結果をご紹介します。
CredentialAccess:RDS/TorIPCaller.SuccessfulLogin(クレデンシャルアクセス Tor IP 発信者 ログイン成功)
ユーザーが、Tor 出口ノードの IP アドレスから RDS データベースに正常にログインしたことを検出しました。
クレデンシャルアクセス(CredentialAccess)とは、コンピューターシステム内の資格情報(IDとパスワードなど)に不正にアクセスすることを指します。
Aurora MySQL 互換クラスターで検知しました。
私は GuardDuty の検出結果を Amazon EventBridge・Amazon SNS・AWS Chatbot 経由で Slack に通知しています。以下、Slack への通知結果です。
Slack に通知される概要だけでも何が起こったのか十分把握できます。
- リージョン
- AWS アカウント ID
- Finding type(検出タイプの種類)
- 検出した脅威の内容
User admin successfully logged into RDS database db-QWOS2XXXXXXXXXXXXXXXXXXXXX from Tor exit node IP 51.89.153.112.
(Tor 出口ノードの IP アドレス 51.89.153.112 からユーザー「admin」が RDS データベース「db-QWOS2XRxxxxxx」に正常にログインした)
- 最初に検出した時間、最後に検出した時間
- 重要度:High
- 重要度「High(高)」は、問題になっているリソース (今回は Aurora MySQL クラスターの DB インスタンス) が侵害され、不正な目的で活発に使用されていることを示します。
- この検出結果に集約されたアクティビティの数
- 複数回ログイン試行された場合、カウント数が増えます。ブルートフォース攻撃が施行された場合、カウント数が大きな数字になると思われます。
Slack 通知の青字部分が AWS マネジメントコンソールへのリンクになっています。
GuardDuty コンソールで検出結果を確認できます。
検出結果にチェックを入れて [アクション] - [エクスポート] から、検出結果を JSON 形式でダウンロードできます。
ダウンロードした JSON(クリックで展開)
export-2023-04-25T09_35_40Z.json
[
{
"AccountId": "123456789012",
"Arn": "arn:aws:guardduty:ap-northeast-1:123456789012:detector/ccc3aaa00e31e16be35c2dxxxxxxxxxx/finding/d4c3dbdf2ce8dcce0dd121xxxxxxxxxx",
"CreatedAt": "2023-04-25T09:25:07.000Z",
"Description": "User admin successfully logged into RDS database db-QWOS2XXXXXXXXXXXXXXXXXXXXX from Tor exit node IP 51.89.153.112.",
"Id": "d4c3dbdf2ce8dcce0dd121xxxxxxxxxx",
"Partition": "aws",
"Region": "ap-northeast-1",
"Resource": {
"ResourceType": "RDSDBInstance",
"RdsDbInstanceDetails": {
"DbInstanceIdentifier": "db-QWOS2XXXXXXXXXXXXXXXXXXXXX",
"Engine": "Aurora MySQL",
"EngineVersion": "5.7.mysql_aurora.2.11.2",
"DbClusterIdentifier": "cluster-ZOSOWCXXXXXXXXXXXXXXXXXXXX",
"DbInstanceArn": "arn:aws:rds:ap-northeast-1:123456789012:db:db-QWOS2XXXXXXXXXXXXXXXXXXXXX"
},
"RdsDbUserDetails": {
"User": "admin",
"Application": "unknown",
"Database": "202304181246db",
"Ssl": "UNENCRYPTED",
"AuthMethod": "NATIVE_MYSQL_AUTHENTICATION"
}
},
"SchemaVersion": "2.0",
"Service": {
"Action": {
"ActionType": "RDS_LOGIN_ATTEMPT",
"RdsLoginAttemptAction": {
"RemoteIpDetails": {
"IpAddressV4": "51.89.153.112",
"Organization": {
"Asn": "0",
"AsnOrg": "OVH SAS",
"Isp": null,
"Org": null
}
}
}
},
"Evidence": {
"ThreatIntelligenceDetails": [
{
"ThreatListName": "Amazon",
"ThreatNames": []
}
]
},
"Archived": false,
"Count": 1,
"DetectorId": "ccc3aaa00e31e16be35c2dxxxxxxxxxx",
"EventFirstSeen": "2023-04-25T09:25:07.000Z",
"EventLastSeen": "2023-04-25T09:25:07.000Z",
"ResourceRole": "TARGET",
"ServiceName": "guardduty",
"AdditionalInfo": {
"Value": "{\"threatListName\":\"Amazon\"}",
"Type": "default"
}
},
"Severity": 8,
"Title": "User admin successfully logged into RDS database db-QWOS2XXXXXXXXXXXXXXXXXXXXX from a Tor exit node IP.",
"Type": "CredentialAccess:RDS/TorIPCaller.SuccessfulLogin",
"UpdatedAt": "2023-04-25T09:25:07.000Z"
}
]
検出結果をクリックすると、詳細が画面右に表示されます。
メッセージ本文末の [情報] をクリックすると、検出タイプに関する説明が画面右に表示されます。この検出結果は Tor 出口ノードの IP アドレスからユーザーが RDS データベースにログイン成功したことを知らせるものであるとわかります。
下部にスクロールすると、検出タイプの詳細へのリンクと、データベースの修復に関するドキュメントへのリンクがあります。
検出結果を見ます。
上部に検出タイプ、検出結果 ID、重要度、検出内容が記載されています。
- 概要
- Slack に通知されたものと同様
- リソース ID には対象の Aurora MySQL DB インスタンスの ID が表示され、リンクになっている
- 影響を受けるリソース
- Resource role(リソースロール):対象のリソースが、不審なことをした(ACTOR)or 不審なことをされた(TARGET)
- 今回は Aurora MySQL 互換クラスターの DB インスタンスが不審な第三者からログインされたので TARGET となっています。
- Resource type(リソースタイプ):RDS Protection で検出される場合は [RDSDBInstance] になる
- RDS DB instance details
- Database Instance identifier(DB インスタンスのリソース ID)
- Engine(エンジン)
- Engine version(エンジンバージョン)
- Database cluster identifier(DB クラスターのリソース ID)
- Database instance ARN(DB インスタンス ARN)
- RDS DB user details
- User(ユーザー):異常なログイン試行に使用されたユーザー名
- Application(アプリケーション):異常なログイン試行に使用されたアプリケーション名
- Database(データベース):異常なログイン試行で操作された MySQL データベース
- SSL:ネットワークに使用された Secure Socket Layer (SSL) のバージョン
- Auth method(認証方法):検出に関与したユーザーが使用した認証方法
- Resource role(リソースロール):対象のリソースが、不審なことをした(ACTOR)or 不審なことをされた(TARGET)
- アクション
- Action type:RDS_LOGIN_ATTEMPT
- Aurora MySQL DB インスタンスにリモート IP アドレスからログイン試行されたことを示します。
- First seen:最初に検出した時間(日本標準時)
- Last seen:最後に検出した時間(日本標準時)
- Action type:RDS_LOGIN_ATTEMPT
- Actor
- IP address:ログイン試行元の IP アドレス(Tor 出口ノードの IP アドレス)
- Organization:ログイン試行元の IP アドレスの所有者情報
- Arn:ASN(Autonomous System Number 、AS 番号)が不明であることを表しています。AS 番号は、インターネット上での通信を管理するための番号です。
- Arn Org:攻撃者の IP アドレスの所有組織を表しています。今回は「OVH SAS」という組織のものであることを示しています。
- 追加情報
- Threat list name:脅威リスト名
- 脅威リストは悪意のある既知の IP アドレスで構成されます。
- このリストはサードパーティの脅威インテリジェンスによって提供されるか、組織専用に生成できます。
- 今回は Amazon が提供している脅威インテリジェンスの中に、該当の Tor 出口ノード IP アドレスが含まれていたということが分かります。
- Archive:この検出結果がアーカイブされていないことを表す
- Threat list name:脅威リスト名
- 証拠:脅威インテリジェンスの詳細
- 脅威 IP リスト:Amazon
脅威インテリジェンス(脅威インテリジェンスフィード)とは、インターネット上で収集された、脅威に関する情報を集めたデータベースやサービスのことで、新しい脅威や攻撃方法、マルウェアの詳細、攻撃者の振る舞いなどの情報が含まれています。
脅威 IP リストについては 信頼できる IP リストと 脅威リストの使用 もあわせて参照ください。
CredentialAccess:RDS/TorIPCaller.FailedLogin(クレデンシャルアクセス Tor IP 発信者 ログイン失敗)
Tor IP アドレスが RDS データベースへのログインに失敗したことを検出しました。
Aurora MySQL 互換クラスターで検知しました。
以下、Slack への通知結果です。
検出した脅威の内容 Tor IP address 51.89.153.112 unsuccessfully attempted to log in to RDS database db-QWOS2XRXXXXXXXXXXXXXXXXXXXXX.
(Tor IPアドレス 51.89.153.112 が、RDSデータベース db-QWOS2XRxxxxxx へのログインに失敗した)が読み取れます。
GuardDuty コンソールで検出結果を確認します。
ダウンロードした JSON(クリックで展開)
export-2023-04-25T09_37_32Z.json
[
{
"AccountId": "123456789012",
"Arn": "arn:aws:guardduty:ap-northeast-1:123456789012:detector/ccc3aaa00e31e16be35c2dxxxxxxxxxx/finding/30c3dbdf2bfb9833579595xxxxxxxxxx",
"CreatedAt": "2023-04-25T09:24:07.000Z",
"Description": "Tor IP address 51.89.153.112 unsuccessfully attempted to log in to RDS database db-QWOS2XRXXXXXXXXXXXXXXXXXXXX.",
"Id": "30c3dbdf2bfb9833579595xxxxxxxxxx",
"Partition": "aws",
"Region": "ap-northeast-1",
"Resource": {
"ResourceType": "RDSDBInstance",
"RdsDbInstanceDetails": {
"DbInstanceIdentifier": "db-QWOS2XRXXXXXXXXXXXXXXXXXXXX",
"Engine": "Aurora MySQL",
"EngineVersion": "5.7.mysql_aurora.2.11.2",
"DbClusterIdentifier": "cluster-ZOSOWCXXXXXXXXXXXXXXXXXXXX",
"DbInstanceArn": "arn:aws:rds:ap-northeast-1:123456789012:db:db-QWOS2XRXXXXXXXXXXXXXXXXXXXX"
},
"RdsDbUserDetails": {
"User": "admin",
"Application": "unknown",
"Database": "unknown",
"Ssl": "UNENCRYPTED",
"AuthMethod": "NATIVE_MYSQL_AUTHENTICATION"
}
},
"SchemaVersion": "2.0",
"Service": {
"Action": {
"ActionType": "RDS_LOGIN_ATTEMPT",
"RdsLoginAttemptAction": {
"RemoteIpDetails": {
"IpAddressV4": "51.89.153.112",
"Organization": {
"Asn": "0",
"AsnOrg": "OVH SAS",
"Isp": null,
"Org": null
}
}
}
},
"Evidence": {
"ThreatIntelligenceDetails": [
{
"ThreatListName": "Amazon",
"ThreatNames": []
}
]
},
"Archived": false,
"Count": 2,
"DetectorId": "ccc3aaa00e31e16be35c2dxxxxxxxxxx",
"EventFirstSeen": "2023-04-25T09:24:07.000Z",
"EventLastSeen": "2023-04-25T09:25:07.000Z",
"ResourceRole": "TARGET",
"ServiceName": "guardduty",
"AdditionalInfo": {
"Value": "{\"threatListName\":\"Amazon\"}",
"Type": "default"
}
},
"Severity": 5,
"Title": "A Tor IP address unsuccessfully attempted to log in to RDS database db-QWOS2XRXXXXXXXXXXXXXXXXXXXX.",
"Type": "CredentialAccess:RDS/TorIPCaller.FailedLogin",
"UpdatedAt": "2023-04-25T09:25:07.000Z"
}
]
Discovery:RDS/TorIPCaller(検出 Tor IP 発信者)
Tor 出口ノードの IP アドレスがアカウントの RDS データベースをプローブ(探査)しましたが、認証の試行は行われなかったことを検出しました。
Aurora Serverless PostgreSQL 互換で検知しました。
以下、Slack への通知結果です。
検出した脅威の内容 Tor exit node IP 185.220.100.252 address probed RDS database db-ZGINDLXXXXXXXXXXXXXXXXXXXX, no authentication attempt was made.
(Tor 出口ノード IPアドレス 185.220.100.252 が RDS データベース db-ZGINDLxxxxx をプローブ(探査)したが、認証の試みは行われなかった)が読み取れます。
GuardDuty コンソールで検出結果を確認します。
ダウンロードした JSON(クリックで展開)
export-2023-04-25T13_22_07Z.json
[
{
"AccountId": "123456789012",
"Arn": "arn:aws:guardduty:ap-northeast-1:123456789012:detector/ccc3aaa00e31e16be35c2dxxxxxxxxxx/finding/5ac3dc49818f5bfc80a158xxxxxxxxxx",
"CreatedAt": "2023-04-25T13:16:20.000Z",
"Description": "Tor exit node IP 185.220.100.252 address probed RDS database db-ZGINDLXXXXXXXXXXXXXXXXXXXX, no authentication attempt was made.",
"Id": "5ac3dc49818f5bfc80a158xxxxxxxxxx",
"Partition": "aws",
"Region": "ap-northeast-1",
"Resource": {
"ResourceType": "RDSDBInstance",
"RdsDbInstanceDetails": {
"DbInstanceIdentifier": "db-ZGINDLXXXXXXXXXXXXXXXXXXXX",
"Engine": "Aurora PostgreSQL",
"EngineVersion": "14.6",
"DbClusterIdentifier": "cluster-Q4WILUXXXXXXXXXXXXXXXXXXXX",
"DbInstanceArn": "arn:aws:rds:ap-northeast-1:123456789012:db:db-ZGINDLXXXXXXXXXXXXXXXXXXXX"
},
"RdsDbUserDetails": {
"User": "postgres",
"Application": "psql",
"Database": "postgres",
"Ssl": "TLSv1_2",
"AuthMethod": "MD5"
}
},
"SchemaVersion": "2.0",
"Service": {
"Action": {
"ActionType": "RDS_LOGIN_ATTEMPT",
"RdsLoginAttemptAction": {
"RemoteIpDetails": {
"IpAddressV4": "185.220.100.252",
"Organization": {
"Asn": "0",
"AsnOrg": "F3 Netze e.V.",
"Isp": null,
"Org": null
}
}
}
},
"Evidence": {
"ThreatIntelligenceDetails": [
{
"ThreatListName": "Amazon",
"ThreatNames": []
}
]
},
"Archived": false,
"Count": 1,
"DetectorId": "ccc3aaa00e31e16be35c2dxxxxxxxxxx",
"EventFirstSeen": "2023-04-25T13:16:20.000Z",
"EventLastSeen": "2023-04-25T13:16:20.000Z",
"ResourceRole": "TARGET",
"ServiceName": "guardduty",
"AdditionalInfo": {
"Value": "{\"threatListName\":\"Amazon\"}",
"Type": "default"
}
},
"Severity": 5,
"Title": "A Tor exit node IP address probed RDS database db-ZGINDLXXXXXXXXXXXXXXXXXXXX, no authentication attempt was made.",
"Type": "Discovery:RDS/TorIPCaller",
"UpdatedAt": "2023-04-25T13:16:20.000Z"
}
]
Application に psql と表示されました。
Arn Org は攻撃者の IP アドレスの所有組織を表しますが、今回は「F3 Netze e.V.」という組織によって管理されている IP アドレスであることが分かります。
Discovery:RDS/MaliciousIPCaller(検出 悪意のある IP 発信者)
悪意のある IP アドレスが RDS データベースをプローブ(探査)しましたが、認証は行われなかったことを検出しました。
この検出結果は Aurora MySQL 互換クラスター起動中にたまたま検知できたのでご紹介します。
以下、Slack への通知結果です。
検出した脅威の内容 IP address 192.241.203.215, that is associated with known malicious activity, probed RDS database db-QWOS2XXXXXXXXXXX, no authentication attempt was made.
(IP アドレス 192.241.203.215 は、既知の悪意のある活動に関連しており、RDS データベース db-QWOS2Xxxxxx をプローブ(探査)したが、認証は試行されなかった)が読み取れます。
GuardDuty コンソールで検出結果を確認します。
ダウンロードした JSON(クリックで展開)
export-2023-05-01T11_51_24Z language=.json
[
{
"AccountId": "123456789012",
"Arn": "arn:aws:guardduty:ap-northeast-1:123456789012:detector/ccc3aaa00e31e16be35c2dxxxxxxxxxx/finding/a6c3eb8dff7099a6a2380dxxxxxxxxxx",
"CreatedAt": "2023-05-01T11:35:02.000Z",
"Description": "IP address 192.241.203.215, that is associated with known malicious activity, probed RDS database db-QWOS2XXXXXXXXXXXXXXXXXXXXX, no authentication attempt was made.",
"Id": "a6c3eb8dff7099a6a2380dxxxxxxxxxx",
"Partition": "aws",
"Region": "ap-northeast-1",
"Resource": {
"ResourceType": "RDSDBInstance",
"RdsDbInstanceDetails": {
"DbInstanceIdentifier": "db-QWOS2XXXXXXXXXXXXXXXXXXXXX",
"Engine": "Aurora MySQL",
"EngineVersion": "5.7.mysql_aurora.2.11.2",
"DbClusterIdentifier": "cluster-ZOSOWCXXXXXXXXXXXXXXXXXXXX",
"DbInstanceArn": "arn:aws:rds:ap-northeast-1:123456789012:db:db-QWOS2XXXXXXXXXXXXXXXXXXXXX"
},
"RdsDbUserDetails": {
"User": "unknown",
"Application": "unknown",
"Database": "unknown",
"Ssl": "UNENCRYPTED",
"AuthMethod": "NATIVE_MYSQL_AUTHENTICATION"
}
},
"SchemaVersion": "2.0",
"Service": {
"Action": {
"ActionType": "RDS_LOGIN_ATTEMPT",
"RdsLoginAttemptAction": {
"RemoteIpDetails": {
"IpAddressV4": "192.241.203.215",
"Organization": {
"Asn": "0",
"AsnOrg": "DIGITALOCEAN-ASN",
"Isp": null,
"Org": null
}
}
}
},
"Evidence": {
"ThreatIntelligenceDetails": [
{
"ThreatListName": "ProofPoint",
"ThreatNames": []
}
]
},
"Archived": false,
"Count": 1,
"DetectorId": "ccc3aaa00e31e16be35c2dxxxxxxxxxx",
"EventFirstSeen": "2023-05-01T11:35:02.000Z",
"EventLastSeen": "2023-05-01T11:35:02.000Z",
"ResourceRole": "TARGET",
"ServiceName": "guardduty",
"AdditionalInfo": {
"Value": "{\"threatListName\":\"ProofPoint\"}",
"Type": "default"
}
},
"Severity": 5,
"Title": "An IP address that is associated with known malicious activity probed RDS database db-QWOS2XXXXXXXXXXXXXXXXXXXXX, no authentication attempt was made.",
"Type": "Discovery:RDS/MaliciousIPCaller",
"UpdatedAt": "2023-05-01T11:35:02.000Z"
}
]
Arn Org は攻撃者の IP アドレスの所有組織を表しますが、今回は「DigitalOcean」という組織によって管理されている IP アドレスであることが分かります。
脅威リスト名は ProofPoint となっています。
今回は ProofPoint が提供している脅威インテリジェンスの中に、該当の Malicious IP アドレスが含まれていたということが分かります。
その他サンプル出力
今回検出できた結果は上記の通りですが、検証しづらい検出タイプは以下のコマンドでサンプル出力することができます。
aws guardduty create-sample-findings \
--detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
--finding-types "CredentialAccess:RDS/AnomalousBehavior.SuccessfulLogin"
aws guardduty create-sample-findings \
--detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
--finding-types "CredentialAccess:RDS/AnomalousBehavior.FailedLogin"
aws guardduty create-sample-findings \
--detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
--finding-types "CredentialAccess:RDS/AnomalousBehavior.SuccessfulBruteForce"
aws guardduty create-sample-findings \
--detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
--finding-types "CredentialAccess:RDS/MaliciousIPCaller.SuccessfulLogin"
aws guardduty create-sample-findings \
--detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
--finding-types "CredentialAccess:RDS/MaliciousIPCaller.FailedLogin"
aws guardduty create-sample-findings \
--detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
--finding-types "Discovery:RDS/MaliciousIPCaller"
実行結果
[cloudshell-user@ip-10-6-21-66 ~]$ aws guardduty create-sample-findings \
> --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
> --finding-types "CredentialAccess:RDS/AnomalousBehavior.SuccessfulLogin"
[cloudshell-user@ip-10-6-21-66 ~]$ aws guardduty create-sample-findings \
> --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
> --finding-types "CredentialAccess:RDS/AnomalousBehavior.FailedLogin"
[cloudshell-user@ip-10-6-21-66 ~]$ aws guardduty create-sample-findings \
> --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
> --finding-types "CredentialAccess:RDS/AnomalousBehavior.SuccessfulBruteForce"
[cloudshell-user@ip-10-6-21-66 ~]$ aws guardduty create-sample-findings \
> --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
> --finding-types "CredentialAccess:RDS/MaliciousIPCaller.SuccessfulLogin"
[cloudshell-user@ip-10-6-21-66 ~]$ aws guardduty create-sample-findings \
> --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
> --finding-types "CredentialAccess:RDS/MaliciousIPCaller.FailedLogin"
[cloudshell-user@ip-10-6-21-66 ~]$ aws guardduty create-sample-findings \
> --detector-id $(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) \
> --finding-types "Discovery:RDS/MaliciousIPCaller"
[cloudshell-user@ip-10-6-21-66 ~]$
以下のように [例] と頭に記載されているのがサンプル出力です。
サンプル出力の中の CredentialAccess:RDS/MaliciousIPCaller.SuccessfulLogin
を見てみます。
おわりに
GuardDuty RDS Protection の検出結果をご紹介しました。
どなたかのお役に立てば幸いです。
参考
Tor の危険性/仕組みついて
Tor 出口ノード IP アドレス