Ruby Getting Started with ASM

このページは日本語には対応しておりません。随時翻訳に取り組んでいます。翻訳に関してご質問やご意見ございましたら、お気軽にご連絡ください。

You can monitor application security for Ruby apps running in Docker, Kubernetes, AWS ECS, and AWS Fargate.

In general, setting up Application Security Management (ASM) involves:

  1. Identifying which services to enable ASM on.
  2. Updating to the latest Datadog library (the most recent APM tracing library).
  3. Enabling the library to collect the application security data from the services and send it to Datadog.
  4. Triggering security signals in your application and seeing how Datadog displays the resulting information.

Prerequisites

  • The Datadog Agent is installed and configured for your application’s operating system or container, cloud, or virtual environment.
  • Datadog APM is configured for your application or service, and traces are being received by Datadog.

Get started

  1. Update your Gemfile to include the Datadog library:

    gem 'ddtrace', '~> 1.1'
    

    For information about which language and framework versions are supported by the library, see Compatibility.

    For more information about upgrading from a dd-trace 0.x version, see the Ruby tracer upgrade guide.

  2. Enable ASM by enabling the APM tracer. The following options describe a quick setup that covers the most common cases. Read the Ruby tracer documentation for more details.

    You can enable ASM either in your code:

    Enable the APM tracer by adding an initializer in your application code:

    # config/initializers/datadog.rb
    
    require 'datadog/appsec'
    
    Datadog.configure do |c|
      # enable the APM tracer
      c.tracing.instrument :rails
    
      # enable ASM
      c.appsec.enabled = true
      c.appsec.instrument :rails
    end
    

    Or enable the APM tracer through auto-instrumentation by updating your Gemfile to auto-instrument:

    gem 'ddtrace', '~> 1.1', require: 'ddtrace/auto_instrument'
    

    And also enable appsec:

    # config/initializers/datadog.rb
    
    require 'datadog/appsec'
    
    Datadog.configure do |c|
      # the APM tracer is enabled by auto-instrumentation
    
      # enable ASM
      c.appsec.enabled = true
      c.appsec.instrument :rails
    end
    

    Enable the APM tracer by adding the following to your application’s startup:

    require 'sinatra'
    require 'ddtrace'
    require 'datadog/appsec'
    
    Datadog.configure do |c|
      # enable the APM tracer
      c.tracing.instrument :sinatra
    
      # enable ASM for Sinatra
      c.appsec.enabled = true
      c.appsec.instrument :sinatra
    end
    

    Or enable the APM tracer through auto-instrumentation:

    require 'sinatra'
    require 'ddtrace/auto_instrument'
    
    Datadog.configure do |c|
      # the APM tracer is enabled by auto-instrumentation
    
      # enable ASM for Sinatra
      c.appsec.enabled = true
      c.appsec.instrument :sinatra
    end
    

    Enable the APM tracer by adding the following to your config.ru file:

    require 'ddtrace'
    require 'datadog/appsec'
    
    Datadog.configure do |c|
      # enable the APM tracer
      c.tracing.instrument :rack
    
      # enable ASM for Rack
      c.appsec.enabled = true
      c.appsec.instrument :rack
    end
    
    use Datadog::Tracing::Contrib::Rack::TraceMiddleware
    use Datadog::AppSec::Contrib::Rack::RequestMiddleware
    

    Or one of the following methods, depending on where your application runs:

    Update your configuration container for APM by adding the following argument in your docker run command:

    docker run [...] -e DD_APPSEC_ENABLED=true [...]
    

    Add the following environment variable value to your container Dockerfile:

    ENV DD_APPSEC_ENABLED=true
    

    Update your configuration yaml file container for APM and add the AppSec env variable:

    spec:
      template:
        spec:
          containers:
            - name: <CONTAINER_NAME>
              image: <CONTAINER_IMAGE>/<TAG>
              env:
                - name: DD_APPSEC_ENABLED
                  value: "true"
    

    Update your ECS task definition JSON file, by adding this in the environment section:

    "environment": [
      ...,
      {
        "name": "DD_APPSEC_ENABLED",
        "value": "true"
      }
    ]
    

    Initialize ASM in your code or set DD_APPSEC_ENABLED environment variable to true in your service invocation:

    env DD_APPSEC_ENABLED=true rails server
    

    The library collects security data from your application and sends it to the Agent, which sends it to Datadog, where out-of-the-box detection rules flag attacker techniques and potential misconfigurations so you can take steps to remediate.

  3. To see Application Security Management threat detection in action, send known attack patterns to your application. For example, trigger the Security Scanner Detected rule by running a file that contains the following curl script:

    for ((i=1;i<=200;i++)); 
    do
    # Target existing service’s routes
    curl https://your-application-url/existing-route -A dd-test-scanner-log;
    # Target non existing service’s routes
    curl https://your-application-url/non-existing-route -A dd-test-scanner-log;
    done

    Note: The dd-test-scanner-log value is supported in the most recent releases.

    A few minutes after you enable your application and exercise it, threat information appears in the Application Trace and Signals Explorer in Datadog.

Security Signal details page showing tags, metrics, suggested next steps, and attacker IP addresses associated with a threat.

Further Reading