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.
Gem
Brakeman Offizielle Website: https://brakemanscanner.org/
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.
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
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/
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
Ein Tool zum Erkennen von Schwachstellen in Gemfile.lock. Sie können unsichere Edelsteine erkennen. Die Installation in Kombination mit Brakeman wird empfohlen.
Fügen Sie es wie Brakeman dem Gemfile hinzu und bündeln Sie es.
group :development do
gem 'bundler-audit'
end
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.
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