Bereiten Sie die Sicherheitsüberprüfungsumgebung für Rails 6 vor

Zweck dieses Artikels

Visualisieren Sie Sicherheitsmaßnahmen in Rails Wir haben einen Mechanismus entwickelt, um Sicherheitslücken zu erkennen. Ich hoffe, es ist hilfreich für diejenigen, die Probleme mit dem Memorandum und den Sicherheitsmaßnahmen von Rails haben. Ich habe diesen Artikel geschrieben.

Bauumgebung

Gem

Über Gem zu verwenden

Brakeman Offizielle Website: https://brakemanscanner.org/ brakeman.jpeg

Eine Bibliothek, die Sicherheitslücken wie SQL Injection-, XSS- und Dos-Angriffe erkennen kann. Es gibt mehr als 50 Arten von Analyseelementen, die auch auf GitHub, Twitter usw. verwendet werden. Wir empfehlen die Verwendung als Codesicherheitsmaßnahme für Rails.

· Installationsmethode

Es ist einfach, mit bundler in einem Rails-Projekt zu installieren. Fügen Sie einen Edelstein unter der Entwicklungsumgebung hinzu und installieren Sie ihn per "Bundle".

group :development do
  gem 'brakeman'
end

Einfach global zu installieren.

gem install brakeman

· Ausführungsmethode

Es ist einfach zu machen.

Führen Sie einfach den Befehl "brakeman" in der Rails-Umgebung aus und er wird ausgeführt. Das folgende Beispiel stammt aus dem Ausführungsergebnis meiner Anwendungsentwicklungsumgebung. Meine App befindet sich in einer Docker-Compose-Umgebung Es wird nach "Docker-Compose Exec Web Bash" ausgeführt. Wenn die Ausführung beginnt, wird der Bericht wie unten gezeigt ausgegeben.

❯ docker-compose exec web bash
root@3dde8034237f:~# brakeman
Loading scanner...
Processing application in /app
Processing gems...
[Notice] Detected Rails 6 application
Processing configuration...
[Notice] Escaping HTML by default
Parsing files...
Processing initializers...
Processing libs...ed
Processing routes...          
Processing templates...       
Processing data flow in templates...
Processing models...          
Processing controllers...     
Processing data flow in controllers...
Indexing call sites...        
Running checks in parallel...
 - CheckBasicAuth
 - CheckBasicAuthTimingAttack
 - CheckCrossSiteScripting
 - CheckContentTag
 - CheckCookieSerialization
 - CheckCreateWith
 - CheckCSRFTokenForgeryCVE
 - CheckDefaultRoutes
 - CheckDeserialize
 - CheckDetailedExceptions
 - CheckDigestDoS
 - CheckDynamicFinders
 - CheckEscapeFunction
 - CheckEvaluation
 - CheckExecute
 - CheckFileAccess
 - CheckFileDisclosure
 - CheckFilterSkipping
 - CheckForgerySetting
 - CheckHeaderDoS
 - CheckI18nXSS
 - CheckJRubyXML
 - CheckJSONEncoding
 - CheckJSONEntityEscape
 - CheckJSONParsing
 - CheckLinkTo
 - CheckLinkToHref
 - CheckMailTo
 - CheckMassAssignment
 - CheckMimeTypeDoS
 - CheckModelAttrAccessible
 - CheckModelAttributes
 - CheckModelSerialize
 - CheckNestedAttributes
 - CheckNestedAttributesBypass
 - CheckNumberToCurrency
 - CheckPageCachingCVE
 - CheckPermitAttributes
 - CheckQuoteTableName
 - CheckRedirect
 - CheckRegexDoS
 - CheckRender
 - CheckRenderDoS
 - CheckRenderInline
 - CheckResponseSplitting
 - CheckRouteDoS
 - CheckSafeBufferManipulation
 - CheckSanitizeMethods
 - CheckSelectTag
 - CheckSelectVulnerability
 - CheckSend
 - CheckSendFile
 - CheckSessionManipulation
 - CheckSessionSettings
 - CheckSimpleFormat
 - CheckSingleQuotes
 - CheckSkipBeforeFilter
 - CheckSprocketsPathTraversal
 - CheckSQL
 - CheckSQLCVEs
 - CheckSSLVerify
 - CheckStripTags
 - CheckSymbolDoSCVE
 - CheckTemplateInjection
 - CheckTranslateBug
 - CheckUnsafeReflection
 - CheckValidationRegex
 - CheckWithoutProtection
 - CheckXMLDoS
 - CheckYAMLParsing
Checks finished, collecting results...
Generating report...

== Brakeman Report ==

Application Path: /app
Rails Version: 6.0.3.3
Brakeman Version: 4.9.1
Scan Date: 2020-09-15 02:51:42 +0000
Duration: 2.0712347 seconds
Checks Run: BasicAuth, BasicAuthTimingAttack, CSRFTokenForgeryCVE, ContentTag, CookieSerialization, CreateWith, CrossSiteScripting, DefaultRoutes, Deserialize, DetailedExceptions, DigestDoS, DynamicFinders, EscapeFunction, Evaluation, Execute, FileAccess, FileDisclosure, FilterSkipping, ForgerySetting, HeaderDoS, I18nXSS, JRubyXML, JSONEncoding, JSONEntityEscape, JSONParsing, LinkTo, LinkToHref, MailTo, MassAssignment, MimeTypeDoS, ModelAttrAccessible, ModelAttributes, ModelSerialize, NestedAttributes, NestedAttributesBypass, NumberToCurrency, PageCachingCVE, PermitAttributes, QuoteTableName, Redirect, RegexDoS, Render, RenderDoS, RenderInline, ResponseSplitting, RouteDoS, SQL, SQLCVEs, SSLVerify, SafeBufferManipulation, SanitizeMethods, SelectTag, SelectVulnerability, Send, SendFile, SessionManipulation, SessionSettings, SimpleFormat, SingleQuotes, SkipBeforeFilter, SprocketsPathTraversal, StripTags, SymbolDoSCVE, TemplateInjection, TranslateBug, UnsafeReflection, ValidationRegex, WithoutProtection, XMLDoS, YAMLParsing

== Overview ==

Controllers: 11
Models: 6
Templates: 56
Errors: 0
Security Warnings: 0

== Warning Types ==


No warnings found

(END)

Ein langer Bericht wird wie oben ausgegeben. Die Ausgabenachricht unter den letzten "Warnungstypen" Wenn "Keine Warnungen gefunden" angezeigt wird, ist dies in Ordnung.

Übrigens, wenn eine Warnung auftritt, wird es wie folgt sein. (Das Folgende ist ein Zitat von der offiziellen Website Quick Start.) XSS-Warnung.

Wenn eine Warnung auftritt, müssen Sie den Inhalt lesen und Maßnahmen ergreifen.

・ Https://brakemanscanner.org/docs/quickstart/

brakeman_text_report.png

Zusätzlich kann Brakeman den Warnausgangspegel in 3 Schritten einstellen. Das READ ME auf GitHub hat die folgende Erklärung.

High - Either this is a simple warning (boolean value) or user input is very likely being used in unsafe ways. Medium - This generally indicates an unsafe use of a variable, but the variable may or may not be user input. Weak - Typically means user input was indirectly used in a potentially unsafe manner.

Übersetzt ins Japanische

Der obige Pegel kann mit w1-w3 und Ausgang eingestellt werden. w1 ist die niedrigste Stufe und w3 ist die höchste Stufe. Zum Beispiel gibt w3 den folgenden Befehl. Wenn Sie es in die CI-Einstellung setzen möchten, kann w2 usw. gut sein.

brakeman -w3

Jetzt können Sie Ihren Rails-Code überprüfen.

Bundler-audit

https://github.com/rubysec/bundler-audit

bundler-audit-cbf59f68.png

Ein Tool zum Erkennen von Schwachstellen in Gemfile.lock. Sie können unsichere Edelsteine erkennen. Die Installation in Kombination mit Brakeman wird empfohlen.

· Installationsmethode

Fügen Sie es wie Brakeman dem Gemfile hinzu und bündeln Sie es.

group :development do
  gem 'bundler-audit'
end

· Ausführungsmethode

Mit dem folgenden Befehl ausführen.

bundle-audit
root@3dde8034237f:~# bundler-audit
No vulnerabilities found

Das folgende Beispiel zeigt, dass Actionpack Version 3.2.10 anfällig ist. Als Lösung: Lösung: Upgrade auf ~> 2.3.15, ~> 3.0.19, ~> 3.1.10,> = 3.2.11 Eine Versionsänderung wird angezeigt. Wenn Schwachstellen angezeigt werden, führen Sie bitte die Versionskorrektur durch.

Name: actionpack
Version: 3.2.10
Advisory: OSVDB-89026
Criticality: High
URL: http://osvdb.org/show/osvdb/89026
Title: Ruby on Rails params_parser.rb Action Pack Type Casting Parameter Parsing Remote Code Execution
Solution: upgrade to ~> 2.3.15, ~> 3.0.19, ~> 3.1.10, >= 3.2.11

Darüber hinaus werden Arbeiten ausgeführt, bei denen die Gem-Datei aktualisiert wird. Wenn dies der Fall ist, führen Sie sie wie folgt aus. Folgendes wird auf der offiziellen Website empfohlen, auch wenn es in CI verwendet wird. Bundler-Audit enthält alle Sicherheitsempfehlungen für Ruby-Bibliotheken Ich benutze Ruby-Advisory-DB, die zum Kompilieren verwendet wird. Dieser Befehl aktualisiert ruby-Advisory-db und überprüft dann.

bundle-audit check --update

Jetzt können Sie nach Gem-Schwachstellen suchen.

Nachwort

Sicherheitsmaßnahmen erfordern eine Vielzahl von Überprüfungen, von SQL- und XSS-Maßnahmen bis hin zu Dos-Angriffen. Neben Code-Sicherheitsmaßnahmen Wenn Sie die Schwachstellen in Ihrem Edelstein nicht entdecken Ich denke, es könnte das Ziel eines Angriffs sein, der diese Sicherheitsanfälligkeit nutzt.

Die diesmal eingeführte Bibliothek ist Code und Gem Ich denke, es ist ein wirksames Mittel, um Sicherheitsmaßnahmen auf beiden Seiten umzusetzen und zu visualisieren. Ich hoffe, es wird für diejenigen hilfreich sein, die Rails entwickeln.

Recommended Posts

Bereiten Sie die Sicherheitsüberprüfungsumgebung für Rails 6 vor
Bereiten Sie die Formatumgebung für "Rails" (VScode) vor.
Bereiten Sie die Umgebung für Java11 und JavaFx mit Ubuntu 18.4 vor
[Schienen] Überprüfen Sie den Inhalt des Objekts
Überprüfen Sie den Migrationsstatus von Schienen
Überprüfen Sie das Stammverzeichnis im Rails-Browser
Ändern Sie die Standardzeitzone für die Rails-App
Überprüfen Sie den Verarbeitungsinhalt mit [Rails] Binding.pry
[Rails] Setzen Sie die Datenbank in der Produktionsumgebung zurück
Erstellen Sie eine Entwicklungsumgebung für Docker + Rails6 + Postgresql
Überprüfen Sie die für den laufenden Java-Prozess festgelegten Optionen
Bereiten Sie die JVM-Sprachentwicklungsumgebung mit WSL vor
Verfahren zum Einführen von Docker in die Entwicklungsumgebung vorhandener Rails-Apps [Rails, MySQL, Docker]
Bereiten Sie die CentOS 8-Umgebung mit Sakura VPS vor
[Rails] Erstellen einer Umgebung für die Entwicklung von Webanwendungen
So überprüfen Sie Rails-Befehle im Terminal
Für diejenigen, die MySQL für die Datenbank in der Umgebungskonstruktion von Rails6 ~ verwenden möchten.
[Rails / Eindeutigkeitsbeschränkung] Überprüfen der Modellvalidierung auf der Konsole / Eindeutigkeitsbeschränkung für mehrere Spalten
Ich habe ein Check-Tool für das Release-Modul erstellt
Konstruktionshandbuch für eine stabile Entwicklungsumgebung für "Rails6" mit "Docker-compose"
Was soll ich für das Test-Framework verwenden [Rails]
Beachten Sie, dass ich beim Erstellen der Rails-Umgebung gestolpert bin
SSL in der lokalen Umgebung von Docker / Rails / Puma
Was Java-Ingenieure benötigen, um sich auf die Java 11-Version vorzubereiten
Anfänger verwenden Ubuntu im Fenster, um die Schienenumgebung vorzubereiten
Aufbau der Rails Docker-Umgebung
Beherrsche das [Rails] Scope!
Erstellen einer Umgebung zum Kopieren des Buches "Test Driven Development"
Ändern Sie das Injektionsziel für jede Umgebung mit Spring Boot 2
Anfänger installieren Docker für Mac und bereiten die Betriebsumgebung php7.0 vor
[Rails] Ich habe zum ersten Mal versucht, die button_to-Methode zu verwenden
[Verfahren 1 für Anfänger] Ruby on Rails: Aufbau einer Entwicklungsumgebung
[Rails] Bereiten Sie Dummy-Daten vor, die zum Testen von [Faker] verwendet werden sollen.
Ändern Sie den Einstellungswert für jede Umgebung mit Digdag (RubyOnRails).