Gosec
Gosec - это сканер безопасности для кода на языке программирования Go.
Название задания в Auditor: Gosec Scanner
Образ в Auditor: registry.cybercodereview.ru/cybercodereview/security-images/gosec:2.20.0
Название импортера в Security Center: Gosec Scanner
Сканер предназначен для выявления потенциальных уязвимостей в кодовой базе Go, включая такие распространенные проблемы, как SQL-инъекции, переполнение буфера и уязвимости межсайтового скриптинга (XSS).
Gosec сканирует Go-код, анализируя абстрактное синтаксическое дерево (AST) программы. Он выполняет анализ потока данных для выявления потенциальных проблем безопасности и сообщает о них пользователю.
Интересной особенностью Gosec является возможность поиска проблем в еще не скомпилированном коде. Это означает, что разработчики могут выявить проблемы безопасности еще до того, как они появятся в кодовой базе. Gosec также обладает широкими возможностями настройки: форматы вывода, уровни критичности и многое другое.
Пример команды Curl
curl -X POST localhost/api/v1/scan/import/ -H "Authorization: Token a75bb26171cf391671e67b128bfc8ae1c779ff7b" -H "Content-Type: multipart/form-data" -F "file=@./gosec.json" -F "product_name=Product1" -F "product_type=Application" -F "scanner_name=Gosec Scanner" -F "branch=dev" -F "[email protected]:cybercodereview/security-center.git"
В этой команде используются следующие параметры:
-X POST
: задает используемый метод HTTP (в данном случае POST).-H "Authorization: Token <authorization_token>"
: задает токен авторизации, полученный от Security Center.-H "Content-Type: multipart/form-data"
: задает тип содержимого запроса.-F "file=@<report_file_path>"
: задает путь к файлу отчета, создаваемого сканером.-F "product_name=<product_name>"
: задает название сканируемого продукта.-F "product_type=<product_type>"
: задает тип сканируемого продукта.-F "scanner_name=<scanner_name>"
: задает имя сканера, используемого для создания отчета (Bandit Scan или GitLab Bandit)-F "branch=<branch_name>"
: (необязательно) указывает имя ветки в репозитории исходного кода (если применимо). Этот параметр особенно полезен, когда вы хотите связать результаты сканирования с определенной веткой в вашем репозитории. Если параметр не указан, сканирование будет связано с веткой по умолчанию
Информация об активах, если используется Auditor
-F "repository=<repository SSH URL>"
: Если ваш продукт хранится в репозитории, введите адрес репозитория в определенном формате, например: [email protected]:cybercodereview/security-center.git-F "docker_image=<registry address>"
: Если ваш продукт является образом, введите адрес реестра, в котором находится ваш продукт, например:registry.cybercodereview.ru/cybercodereview/security-center/back/importer:latest-F "domain=<domain>"
: Если ваш продукт является веб-продуктом, введите доменное имя вашего продукта, например: cybercodereview.ru-F "host=<host>"
: Если ваш продукт является веб-продуктом, введите IP-адрес вашего продукта, например: 0.0.0.0
Пример отчета:
{
"rules": [
{
"id": "rule1",
"name": "just_some_rule_name",
"description": "just_some_description",
"engineId": "test",
"cleanCodeAttribute": "FORMATTED",
"impacts": [
{
"softwareQuality": "MAINTAINABILITY",
"severity": "HIGH"
},
{
"softwareQuality": "SECURITY",
"severity": "LOW"
}
]
},
{
"id": "rule2",
"name": "just_some_other_rule_name",
"description": "just_some_description",
"engineId": "test2",
"cleanCodeAttribute": "IDENTIFIABLE",
"impacts": [
{
"softwareQuality": "RELIABILITY",
"severity": "LOW"
}
]
}
],
"issues": [
{
"ruleId": "rule1",
"effortMinutes": 40,
"primaryLocation": {
"message": "fix the issue here",
"filePath": "file1.js",
"textRange": {
"startLine": 1,
"startColumn": 2,
"endLine": 3,
"endColumn": 4
}
}
},
{
"ruleId": "rule1",
"primaryLocation": {
"message": "fix the bug here",
"filePath": "file2.js",
"textRange": {
"startLine": 3
}
}
},
{
"ruleId": "rule1",
"primaryLocation": {
"message": "fix the bug here",
"filePath": "file3.js"
}
},
{
"ruleId": "rule1",
"primaryLocation": {
"message": "fix the bug here",
"filePath": "file3.js"
},
"secondaryLocations": [
{
"message": "fix the bug here",
"filePath": "file1.js",
"textRange": {
"startLine": 1
}
},
{
"filePath": "file2.js",
"textRange": {
"startLine": 2
}
}
]
},
{
"ruleId": "rule2",
"effortMinutes": 40,
"primaryLocation": {
"message": "fix the bug here",
"filePath": "file3.js"
},
"secondaryLocations": [
{
"message": "fix the bug here",
"filePath": "file1.js",
"textRange": {
"startLine": 1
}
},
{
"filePath": "file2.js",
"textRange": {
"startLine": 2
}
}
]
}
]
}
Last updated