Category: Amazon Inspector*


ランサムウェア「WannaCry」に関するAWSへの影響について

 

2017年5月12日頃からWannaCry(別名、WCry、WanaCrypt0r 2.0、Wanna Decryptorなど)と呼ばれるランサムウェア(身代金マルウェア)による被害が世界中から報告されはじめました。日本でも複数の大手企業がこのマルウェアに感染したというニュースが報道されています。

このマルウェアは、ファイル共有および印刷共有サービスを提供するWindows SMBサーバー上に存在する脆弱性を悪用します。デフォルトでは、SMBサーバーはUDPポート137/138およびTCPポート139/445で動作します。また、Windowsオペレーティングシステムの複数のバージョンが対象で、Microsoft社は、この脆弱性を解消するため、2017年3月14日にMicrosoft Windows SMB Server(4013389)の重要なセキュリティ更新プログラムをリリースしました。詳細は、Microsoft MSRC blog もしくは Microsoft Security Bulletin MS1​​7-010 をご参照ください。

 

WannaCryによるAWSサービスへの影響

 

EC2 Windows

 

Amazon EC2上のWindowsに関しては、AWSから提供されている2017.04.12以降のリリースのAMIであれば、この脆弱性の被害を受けていません。また、自動更新が有効になっている場合も、この脆弱性は解消されています。2017.04.12より前のAMIを使用している、かつ、自動更新を有効にしていないお客様は、前述のセキュリティ更新プログラムをインストールすることをお勧めします。

AWSでは、セキュリティのベストプラクティスに従い、セキュリティグループの設定を確認し、その必要のあるインスタンスおよびリモートホストに対してのみ前述のポートへのアクセスを許可することを、常にお勧めしています。デフォルトでは、EC2セキュリティグループはこれらのポートをブロックします。

AWSのWindows AMIのリリースノートはこちらです。

 

WorkSpaces

 

Amazon WorkSpacesに関しては、2017 年4月15日以降にWorkSpaceを作成した、または、自動更新を有効にしたAmazon WorkSpacesのお客様は、この脆弱性の影響を受けません。 2017年4月15日より前にWorkSpaceを作成し、自動更新を有効にしていないお客様は、セキュリティ更新プログラムをインストールするか、 WorkSpaceを終了して再作成することをお勧めします。

 

Directory Service

 

AWS Directory Serviceに関しては、2017/05/20時点でパッチ適用作業が完了しました。お客様による対応は必要ありません。Amazon Simple AD、 AD Connector、AWS Cloud Directory はこの問題の影響を受けていません。最新情報につきましては、下の原文へのリンク先をご参照ください。

 

Elastic Beanstalk

 

AWS Elastic Beanstalkに関しては、2017 年5月4日以降のWindowsサーバーで構築された環境は、本問題の影響を受けません。ただし、既存のElastic Beanstalk Windows環境のアップデートは常に推奨しています。AWS管理コンソールから、もしくは、環境を再構築することでアップデート可能です。Elastic Beanstalkの現時点での最新のリリースノートはこちらです。

 

AWSによるセキュリティ速報(原文)は、こちらをご覧ください。

 

AWSサービスの効果的な使い方

 

Amazon Inspectorは、Amazon EC2インスタンスに対してエージェントを導入し、セキュリティ診断を行うサービスです。CVE(共通脆弱性識別子)のルールパッケージに基づいた診断も可能で、WannaCryに関連するCVE-2017-0143からCVE-2017-0148の脆弱性の検証ができます。AWS管理コンソール、CLI、APIから診断を実行できます。診断結果は、AWS管理コンソールで表示したり、エグゼクティブサマリー含むPDF形式のレポートとしても取得できます。

AWSコンソール上でのAmazon Inspector 結果一覧画面例

 

AWSコンソール上でのAmazon Inspector 結果詳細画面例

 

詳しくは、Amazon Inspector ユーザーガイドをご覧ください。

 

Amazon EC2 Systems Managerは、Amazon EC2インスタンスおよびオンプレミスサーバーに対してエージェントを導入し、ソフトウェアインベントリ収集やOSパッチ適用、OS構成変更などを一元的に管理できるサービスです。インスタンスに対して、シェルスクリプトやPowerShellコマンドの実行、パッチ適用の時間指定や定期実行などの管理タスクを簡単に自動化できます。今回のような、Windowsのセキュリティ更新プログラム適用にもご利用いただけます。詳しくは、Amazon EC2 Systems Manager ユーザーガイドをご覧ください。

 

推奨するAWSソリューション

 

今回のようなランサムウェアに対する最も有効な対策は、常日頃からバックアップを取得・管理し、セキュリティ推奨構成を保っておくことです。AWSではバックアップ&復旧に関する各種ソリューションの情報が提供されています。

上記の情報も参考に、これからも安心・安全なAWSライフをご満喫ください。

桐山 隼人, セキュリティソリューションアーキテクト
坪 和樹, クラウドサポートエンジニア
長谷川 淳, クラウドサポートエンジニア

Amazon Inspector の更新 – 評価レポート、プロキシサポートなど

Amazon Inspector は当社の自動セキュリティ評価サービスです。このサービスは AWS で実行するアプリケーションの動作を分析し、セキュリティ問題を識別する上で役立ちます。Inspector については 2015 年の後半にこのブログで紹介し、その使い方についてご説明したことがあります (「Amazon Inspector – 自動セキュリティ評価サービス (Amazon Inspector – Automated Security Assessment Service)」)。同サービスを使うには、まずタグを使用してアプリケーションを生成する AWS リソースのコレクションを定義します。次に、セキュリティ評価テンプレートを作成し評価の一部として実行したい一連のルールを特定します。

評価ターゲットとセキュリティ評価テンプレートを作成したら、クリック 1 つでターゲットリソースに対して実行することができます。この評価は Linux と Windows ベースの EC2 インスタンスで実行するエージェントを活用します (詳細については「AWS エージェント (AWS Agents)」をご覧ください)。評価は手動で実行したり、AWS Lambda を使用して既存の発券システムに結果を転送することができます (手順については「Amazon Inspector でセキュリティ脆弱性テストをスケールする (Scale Your Security Vulnerability Testing with Amazon Inspector)」をご覧ください)。実行するインスタンスが 1 件または何千件とある場合でも、定期的かつ頻繁に評価を行うことをおすすめします。デプロイや統合インスタンスといった DevOps パイプラインの一部として実行できます。そうすることで、セキュリティ評価テンプレートの作成時に選択したルールパッケージによる条件に見合った本稼働環境で、コードやシステムを安心してデプロイすることが可能になります。また、設定ドリフトを回避するため、本稼働システムに対しても頻繁に評価を実行することをおすすめします。Amazon Inspector には、次の強力な新機能を追加したばかりです。

  • 評価レポート – 新しい評価レポートはエグゼクティブサマリーから始まり、評価の総合的な概要を提供します。このレポートはチームやリーダーシップとの共有そしてコンプライアンス監査のドキュメントとしても使用できるように作成されています。
  • プロキシのサポート – プロキシ環境内で実行するようにエージェントを設定できるようになりました (これについては多くのお客様からリクエストいただきました)。
  • CloudWatch メトリクス – 長期に渡り変更をトラックして確認できるように、Inspector が Amazon CloudWatch にメトリクスを発行するようになりました。
  • Amazon Linux 2017.03 のサポートAmazon Linux AMI の新しいバージョンを本日リリースしました。Inspector もこれに対応しています。

評価レポート
評価の実行が完了したら、HTML 形式または PDF 形式で評価レポートの詳細をダウンロードすることができます。

レポートはカバーページとエグゼクティブサマリーで始まります。

評価ルールとテストしたターゲットを要約します。

各ルールパッケージの結果を要約します。

このレポートはコンプライアンス監査のドキュメントであるため、各結果と解決方法のヒントなど詳細情報を含んでいます。

レポートの全文は、すべてのターゲットインスタンスでどのルールがチェックされパスしたかを示します。

Proxy のサポート
Inspector エージェントが HTTP プロキシを介して Inspector と通信できるようになりました。Linux インスタンスでは HTTPS プロキシを、Windows インスタンスでは WinHTTP プロキシをサポートしています。AWS エージェントのプロキシサポート設定に関する手順については「Amazon Inspector ユーザーガイド (Amazon Inspector User Guide)」をご覧ください。

CloudWatch メトリクス
Amazon Inspector が各実行の後において Amazon CloudWatch にメトリクスを発行するようになりました。メトリクスはターゲットとテンプレート別に分類されています。AWS アカウントで実行されてきた評価の実行数を表示する集計メトリクスもご利用いただけるようになりました。これまでのように CloudWatch コンソールでメトリクスを確認できます。

ターゲットごとに発行したメトリクスの例は次をご覧ください。

テンプレートごとのメトリクスの例は次をご覧ください。

Amazon Linux 2017.03 のサポート
AWS の多くのお客様が Amazon Linux AMI をご利用されており、新しいバージョンが利用可能になり次第、自動アップグレードをされています。こうしたお客様に引き続き Amazon Inspector をご利用いただくため、AMI の現状バージョンだけでなく今後のバージョンでも、リリース当日に Amazon Inspector で必ずサポートされるようにしました。

今すぐ利用可能
これらのすべての機能は今すぐご利用いただけます。

料金はエージェント、評価ベースごとに定められます。毎月 45,000 以上の評価を実行する場合は、各評価 0.30 USD からスタートします。(詳しくは「Amazon Inspector の料金表 (Amazon Inspector Pricing)」をご覧ください)。

Jeff;

Amazon Inspector でセキュリティ脆弱性テストを拡大

私の同僚である Eric Fitzgerald による次の記事は、AWS Lambda 関数を使用して Amazon Inspector による評価結果をお客様のチケット発行システムやワークフローシステムに転送する方法についてご説明しています。


Jeff


AWS Re:Invent 2015 にて、セキュリティ脆弱性評価サービスの Amazon Inspector をご紹介しました。同サービスは、お客様が早期かつ頻繁にセキュリティ脆弱性テストを実施できるようにサポートするものです。Amazon Inspector をご利用いただくと、お客様は開発環境、テスト環境、実稼働環境でセキュリティテストを自動化することができます。セキュリティ脆弱性をソフトウェア開発、デプロイ、運用ライフサイクル全体の一部として識別します。Amazon Inspector の自動セキュリティテストは、お客様から非常に高く評価されています。Amazon InspectorAnalyze Application Security により、セキュリティ評価を今まで以上に頻繁に実行できるようになったほか、以前に比べセキュリティ脆弱性の早期発見に繋がったと報告を受けています。けれども、セキュリティ脆弱性を識別するだけでは完全といえません。脆弱性を発見したら問題を修正する必要があります。多くのお客様は Amazon Inspector による評価結果に対応するためのワークフローを自動化そして加速するために、Amazon Inspector を自社のワークフローシステムやチケット発行システムと統合しています。Amazon Inspector はそうしたポイントを念頭にを設計しているので、Amazon Inspector による評価結果をメールやワークフローシステムまたはチケット発行システムで統合する方法のひとつを詳しくご説明することにいたしました。

AWS Lambda を使用して Amazon Inspector による評価結果をチケット発行システムにプッシュする
この例では AWS Lambda 関数を使用して、メール経由で作成するインシデントに対応できるシステムに Amazon Inspector を接続します。イベントのフローは次のとおりです。

  1. Amazon Inspector が実行しセキュリティ評価を行います。実行終了前に Amazon Simple Notification Service (SNS) トピックへメッセージを送信します。
  2. SNS メッセージが Lambda 関数を呼び出します。
  3. 関数がセキュリティ評価から結果を取得します。
  4. 別の SNS トピックを使用してフォーマットした評価結果をメールで送信します。

途中、この関数は宛先トピックを作成し、必要であればサブスクリプションをメールで送信します。

関数を設定する
Amazon Inspector からの評価を実行する AWS リージョンで、この関数を設定してください。複数のリージョンで Amazon Inspector を実行している場合は、各リージョンで同じステップを繰り返してください。ステップは次のとおりです。

  1. Amazon Inspector の SNS トピックを作成します。
  2. Amazon Inspector を設定して、新しく作成したトピックに評価結果を送信します。
  3. 評価結果を取得、フォーマット、メールで送信できるように Lambda 関数を設定します。

SNS トピックを設定する
まず、新しい結果報告がある場合に Amazon Inspector が通知する Amazon SNS トピックを設定します。Amazon SNS トピックがフォーマットした後、他のシステムにメールで評価結果を送信します。Amazon SNS コンソールにアクセスして新しい Amazon SNS トピックを作成します。このトピックが Amazon Inspector 通知の送信先になります。トピック名はお好きなものをお選びください。次のポリシーをトピックに指定します。トピックを選択してから [Other topic actions] をクリックし [Edit topic policy] を選択してください。アドバンスビューで既存のポリシーテキストを次のポリシーに置き換えます。

{
  "Version": "2008-10-17",
  "Id": "inspector-sns-publish-policy",
  "Statement": [
    {
      "Sid": "inspector-sns-publish-statement",
      "Effect": "Allow",
      "Principal": {
        "Service": "inspector.amazonaws.com"
      },
      "Action": "SNS:Publish",
      "Resource": "arn:aws:sns:*"
    }
  ]
}

AWS Identity and Access Management (IAM) ポリシーに詳しい方は、ポリシーの Resource の値が Amazon SNS トピックの ARN と同じになるように変更すると Amazon Inspector を制限することが可能になり、このトピックに対してのみ発行することができるので、セキュリティの視点からもこれがベストプラクティスになります。Amazon Inspector を設定する
Amazon Inspector コンソールにアクセスし、評価テンプレートのページで外部システムに送信したい評価結果の評価テンプレートを選択します。その行を展開すると SNS トピックのセクションが表示されます。Amazon SNS トピックの左側にある鉛筆アイコンをクリックすると、ドロップダウンリストから先ほど作成したばかりの Amazon SNS トピックを選択することができます。トピックを選択したら [Save] をクリックしてください。

Lambda 関数を設定する
Lambda コンソールにアクセスし SNS-message-python 設計図を使用して新しい関数を作成します。

イベントソースの SNS を選択してから、ステップ 1 で作成した SNS トピックを選びます。

関数の設定を完了するには [Next] をクリックしてください。関数の名前と説明を入力し、Python 2.7 runtime を選択して関数のサンプルコードを次のコードに置き換えます。

from __future__ import print_function
import boto3
import json
import datetime
 
sns = boto3.client('sns')
inspector = boto3.client('inspector')
 
# SNS topic - will be created if it does not already exist
SNS_TOPIC = "Inspector-Finding-Delivery"
 
# Destination email - will be subscribed to the SNS topic if not already
DEST_EMAIL_ADDR = "eric@example.com"
 
# quick function to handle datetime serialization problems
enco = lambda obj: (
    obj.isoformat()
    if isinstance(obj, datetime.datetime)
    or isinstance(obj, datetime.date)
    else None
)
 
def lambda_handler(event, context):
 
    # extract the message that Inspector sent via SNS
    message = event['Records'][0]['Sns']['Message']
 
    # get inspector notification type
    notificationType = json.loads(message)['event']
 
    # skip everything except report_finding notifications
    if notificationType != "FINDING_REPORTED":
        print('Skipping notification that is not a new finding: ' + notificationType)
        return 1
   
    # extract finding ARN
    findingArn = json.loads(message)['finding']
 
    # get finding and extract detail
    response = inspector.describe_findings(findingArns = [ findingArn ], locale='EN_US')
    print(response)
    try:
        finding = response['findings'][0]
    except OSError as err:
        print("OS error: {0}".format(err))
    except:
        print("Unexpected error:", sys.exc_info()[0])
        raise
       
    # skip uninteresting findings
    title = finding['title']
    if title == "Unsupported Operating System or Version":
        print('Skipping finding: ', title)
        return 1
       
    if title == "No potential security issues found":
        print('Skipping finding: ', title)
        return 1
   
    # get the information to send via email
    subject = title[:100] # truncate @ 100 chars, SNS subject limit
    messageBody = "Title:\n" + title + "\n\nDescription:\n" + finding['description'] + "\n\nRecommendation:\n" + finding['recommendation']
   
    # un-comment the following line to dump the entire finding as raw json
    # messageBody = json.dumps(finding, default=enco, indent=2)
 
    # create SNS topic if necessary
    response = sns.create_topic(Name = SNS_TOPIC)
    snsTopicArn = response['TopicArn']
 
    # check to see if the subscription already exists
    subscribed = False
    response = sns.list_subscriptions_by_topic( TopicArn = snsTopicArn )
 
    # iterate through subscriptions array in paginated list API call
    while True:
        for subscription in response['Subscriptions']:
            if ( subscription['Endpoint'] == DEST_EMAIL_ADDR ):
                subscribed = True
                break
       
        if 'NextToken' not in response:
            break
       
        response = sns.list_subscriptions_by_topic(
            TopicArn = snsTopicArn,
            NextToken = response['NextToken']
            )
       
    # create subscription if necessary
    if ( subscribed == False ):
        response = sns.subscribe(
            TopicArn = snsTopicArn,
            Protocol = 'email',
            Endpoint = DEST_EMAIL_ADDR
            )
 
    # publish notification to topic
    response = sns.publish(
        TopicArn = snsTopicArn,
        Message = messageBody,
        Subject = subject
        )
 
    return 0

次の [ DEST_EMAIL_ADDR ] の値を必ず編集してください。次にインシデント管理システムにインシデントを送信する時に使用するメールアドレスを入力します。オプションとして、 Amazon Inspector が評価結果を送信する時に使用する SNS トピックの名前を変更することもできます。ハンドラー関数 (lambda_function.lambda_handler) はそのままにし、関数に名前を指定します。

Role のドロップダウンリストから [*Basic execution role] を選択します。Lambda が新しいページにアクセスしたら、ポリシードキュメントを表示して代わりに次を使用してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "inspector:DescribeFindings",
                "SNS:CreateTopic",
                "SNS:Subscribe",
                "SNS:ListSubscriptionsByTopic",
                "SNS:Publish"
            ],
            "Resource": "*"
        }
    ]
}

[Allow] ボタンをクリックしロールを作成したら AWS Lambda に戻り、高度な設定はそのままにしておきます。Review ページで [Enable event source] を必ずクリックしてください。

[Create function] をクリックして関数を保存します。これでステップが完了しました。

準備完了
評価結果を別のシステムに送信する場合は、評価テンプレートに最初の Amazon SNS トピック (ここで紹介した手順で作成したもの) を追加し、新しい評価結果レポートがそのトピックに公開されるよう選択されていることを確認します。最初に評価を実行すると、Amazon Inspector が新しい評価結果について Lambda に通知します。作成した Lambda 関数が SNS トピックを作成し (まだ存在しない場合)、そのトピックに宛先のメールアドレスを受信登録して (登録されていない場合)、そのアドレスにメールで評価結果を送信します。Lambda がメールアドレスをそのトピックに受信登録する必要があった場合は、受信登録の希望を確認するためのリンクが含まれたメールが 1 件届きます。このリンクをクリックして確認すると、Amazon Inspector がそのメールアドレスに評価結果を送信します。Atlassian の Jira Service Desk に接続する手順は、非常に簡単になります。Jira ServiceDesk で、Customer Channels にアクセスします。メールを受信し、新しい問題を作成できるメールアドレスが表示されます。Lambda 関数の Python スクリプトにそのメールアドレスを入力します。このメールアドレスに Inspector から評価結果が送信されます。ServiceDesk によってこれらの問題が自動的に ServiceDesk 問題に変えられるため、ここでワークフローを管理できます。

最新情報
Amazon Inspector をご利用いただき、ありがとうございます。今後の最新情報にご期待ください。

Eric Fitzgerald、Principal Security Engineer