Préparer l'environnement de contrôle de sécurité pour Rails 6

Objectif de cet article

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.

Environnement de construction

Gem

À propos de Gem à utiliser

Brakeman Site officiel: https://brakemanscanner.org/ brakeman.jpeg

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.

· Méthode d'installation

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

· Méthode d'exécution

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/

brakeman_text_report.png

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

bundler-audit-cbf59f68.png

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.

· Méthode d'installation

Comme Brakeman, ajoutez-le au Gemfile et regroupez-le.

group :development do
  gem 'bundler-audit'
end

· Méthode d'exécution

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.

Épilogue

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

Préparer l'environnement de contrôle de sécurité pour Rails 6
Préparer l'environnement de format pour "Rails" (VScode)
Préparer l'environnement pour java11 et javaFx avec Ubuntu 18.4
[Rails] Vérifiez le contenu de l'objet
Vérifier l'état de migration des rails
Vérifiez la racine sur le navigateur Rails
Modifier le fuseau horaire par défaut de l'application rails
Vérifiez le contenu du traitement avec [rails] binding.pry
[Rails] Réinitialisez la base de données dans l'environnement de production
Créer un environnement de développement pour Docker + Rails6 + Postgresql
Vérifiez les options définies pour le processus Java en cours d'exécution
Préparer l'environnement de développement de langage JVM avec WSL
Procédure pour introduire Docker dans l'environnement de développement des applications Rails existantes [Rails, MySQL, Docker]
Préparez l'environnement CentOS 8 avec Sakura VPS
[Rails] Création d'un environnement pour le développement d'applications Web
Comment vérifier les commandes Rails dans le terminal
Pour ceux qui souhaitent utiliser MySQL pour la base de données dans la construction de l'environnement de Rails6 ~.
[Contrainte Rails / Unicité] Comment vérifier la validation du modèle sur la console / Contrainte d'unicité pour plusieurs colonnes
J'ai créé un outil de vérification pour le module de version
Manuel de construction de l'environnement de développement stable pour "Rails6" avec "Docker-compose"
Que dois-je utiliser pour le framework de test [Rails]
Notez que je suis tombé sur la construction de l'environnement Rails
SSL dans l'environnement local de Docker / Rails / puma
Ce dont les ingénieurs Java ont besoin pour se préparer à la version Java 11
Les débutants utilisent ubuntu dans la fenêtre pour préparer l'environnement des rails
Construction de l'environnement Rails Docker
Maîtrisez la portée [Rails]!
Créer un environnement pour copier le livre "Test Driven Development"
Changez la cible d'injection pour chaque environnement avec Spring Boot 2
Les débutants installent Docker pour Mac et préparent l'environnement d'exploitation php7.0
[Rails] J'ai essayé d'utiliser la méthode button_to pour la première fois
[Procédure 1 pour les débutants] Ruby on Rails: Construction d'un environnement de développement
[Rails] Préparez les données factices à utiliser pour les tests [Faker]
Modifiez la valeur du paramètre pour chaque environnement avec Digdag (RubyOnRails)