Visualisez les mesures de sécurité dans Rails Nous avons construit un mécanisme pour détecter toute vulnérabilité de sécurité. J'espère que cela sera utile pour ceux qui ont des problèmes avec le mémorandum et les mesures de sécurité Rails. J'ai écrit cet article.
Gem
Brakeman Site officiel: https://brakemanscanner.org/
Une bibliothèque capable de détecter les vulnérabilités de sécurité telles que l'injection SQL, les attaques XSS et Dos. Il existe plus de 50 types d'éléments d'analyse, qui sont également utilisés sur GitHub, Twitter, etc. Nous vous recommandons de l'utiliser comme mesure de sécurité du code pour les rails.
C'est facile à installer avec bundler
dans un projet Rails.
Ajoutez un bijou sous l'environnement de développement et installez-le par bundle
.
group :development do
gem 'brakeman'
end
Facile à installer dans le monde entier.
gem install brakeman
C'est facile à faire.
Exécutez simplement la commande brakeman
sous l'environnement Rails et elle commencera à fonctionner.
L'exemple ci-dessous est tiré du résultat de l'exécution de mon environnement de développement d'application.
Mon application est dans un environnement Docker-compose
Il s'exécute après docker-compose exec web bash
.
Lorsque l'exécution démarre, le rapport sera généré comme indiqué ci-dessous.
❯ 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)
Un long rapport est produit comme ci-dessus.
Le message de sortie sous les derniers Types d'avertissement
S'il dit "Aucun avertissement trouvé", c'est OK.
Au fait, si un avertissement se produit, ce sera comme suit. (Ce qui suit est une citation du site officiel Quick Start.) Avertissement XSS.
Lorsqu'un avertissement se produit, il est nécessaire de lire le contenu et d'agir.
・ Https://brakemanscanner.org/docs/quickstart/
De plus, Brakeman peut régler le niveau de sortie d'avertissement en 3 étapes. Le READ ME sur GitHub a l'explication suivante.
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.
Traduit en japonais
Le niveau ci-dessus peut être réglé avec w1-w3 et la sortie. w1 est le niveau le plus bas et w3 est le niveau le plus élevé. Par exemple, w3 donne la commande suivante. Si vous voulez le mettre en réglage CI, w2 etc. peut être bon.
brakeman -w3
Vous êtes maintenant prêt à vérifier la sécurité de votre code Rails.
Bundler-audit
https://github.com/rubysec/bundler-audit
Un outil pour détecter les vulnérabilités dans Gemfile.lock. Vous pouvez détecter les gemmes dangereuses. Une installation en combinaison avec Brakeman est recommandée.
Comme Brakeman, ajoutez-le au Gemfile et regroupez-le.
group :development do
gem 'bundler-audit'
end
Exécutez avec la commande suivante.
bundle-audit
root@3dde8034237f:~# bundler-audit
No vulnerabilities found
L'exemple ci-dessous montre que la version 3.2.10 de l'actionpack est vulnérable. Aussi, comme solution, Solution: mise à niveau vers ~> 2.3.15, ~> 3.0.19, ~> 3.1.10,> = 3.2.11 Un changement de version est affiché. Si des vulnérabilités apparaissent, veuillez effectuer le travail de correction de version.
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
En outre, un travail de mise à jour du Gemfile se produit et, s'il se produit, exécutez-le comme suit. Ce qui suit est recommandé sur le site officiel, même lors de son utilisation dans CI. bundler-audit fait toutes les recommandations de sécurité liées aux bibliothèques Ruby J'utilise ruby-Advisory-db, qui est utilisé pour compiler. Cette commande met à jour ruby-Advisory-db puis vérifie.
bundle-audit check --update
Vous êtes maintenant prêt à rechercher les vulnérabilités Gem.
Les mesures de sécurité nécessitent une grande variété de contrôles, des mesures SQL et XSS aux attaques Dos. En plus des mesures de sécurité du code Si vous ne découvrez pas la vulnérabilité du Gem que vous utilisez Je pense qu'il pourrait être la cible d'une attaque qui utilise cette vulnérabilité.
La bibliothèque introduite cette fois-ci est code et Gem Je pense que c'est un moyen efficace pour mettre en œuvre et visualiser les mesures de sécurité des deux côtés. J'espère que cela sera utile pour ceux qui développent des rails.
Recommended Posts