МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
/
Лабораторна робота №4
З дисципліни
“Безпека програмного забезпечення”
Тема: «Усунення вразливостей за допомогою Fortify on Demand»
Львів - 2024
Мета роботи: Навчитись усувати вразливості виявлені за допомогою Fortify on Demand на основі наданих системою рекомендацій.
Виконання роботи
1. Hardcoded API Credentials
Це статична інформація для автентифікації, вбудована безпосередньо у вихідний код програми. Це небезпечно, оскільки, якщо їх буде виявлено, неавторизовані користувачі зможуть легко отримати доступ до конфіденційних систем або даних, що становить значний ризик для безпеки.
Усунення вразливості
Я усунув дану уразливість зберігаючи ключі API в окремому .env файлі. Потім я отримав доступ до цих значень у коді через змінні оточення. Це підвищило безпеку, оскільки конфіденційні дані були відокремлені від вихідного коду.
Було:
it('returns payload from decoding a valid JWT', inject([LoginGuard], (guard: LoginGuard) => {
localStorage.setItem('token', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c')
expect(guard.tokenDecode()).toEqual({
sub: '1234567890',
name: 'John Doe',
iat: 1516239022
})
}))
Стало:
import * as dotenv from 'dotenv';
dotenv.config();
…
it('returns payload from decoding a valid JWT', inject([LoginGuard], (guard: LoginGuard) => {
const token = process.env.TOKEN || '';
localStorage.setItem('token', token)
expect(guard.tokenDecode()).toEqual({
sub: '1234567890',
name: 'John Doe',
iat: 1516239022
})
}))
Контролі інформаційної безпеки
1. Використання змінних середовища: Використання змінних середовища для безпечного зберігання облікових даних API замість того, щоб хардкодити їх безпосередньо у вихідному коді. Це дозволяє запобігти витоку у випадку несанкціонованого доступу до кодової бази.
2. Системи управління секретами: Використання спеціальних систем управління секретами (наприклад, HashiCorp Vault, AWS Secrets Manager) для централізації та контролю доступу до конфіденційної інформації. Це забезпечує безпечне зберігання та динамічне отримання ключів та облікових даних API.
3. Регулярна зміна ключів: Впровадження практики регулярної зміни ключів для облікових даних API зменшить вікно можливостей для потенційних зловмисників зловживати будь-якими скомпрометованими обліковими даними.
4. Контрольні журнали та моніторинг: Налаштування надійних контрольних журналів та механізмів безперервного моніторингу для відстеження доступу до конфіденційної інформації, оперативного виявлення та сповіщення про будь-які несанкціоновані спроби доступу до облікових даних API або їх модифікації.
2. Insecure Transport
Незахищений транспорт означає незашифровану передачу даних через Інтернет у вигляді відкритого тексту, без заходів безпеки, передбачених протоколом HTTPS. Він небезпечний тим, що наражає конфіденційну інформацію на потенційне перехоплення та несанкціонований доступ, роблячи її вразливою до різних кібератак, таких як підслуховування та маніпуляції з даними.
Усунення вразливості
Я усунув уразливість у своєму коді, застосувавши HTTPS, використовуючи ключ і самопідписаний сертифікат для шифрування даних, що передаються між клієнтом і сервером, забезпечивши безпечне і зашифроване з'єднання, тим самим запобігаючи несанкціонованому доступу і перехопленню даних. Таке налаштування уможливило безпечний зв'язок завдяки шифруванню трафіку, забезпеченню цілісності та конфіденційності даних, а також встановленню довіри між сервером і клієнтом.
Було:
describe('open a server before running the test', () => {
const testServer = net.createServer()
before((done) => {
testServer.listen(3000, done)
})
Стало:
describe('open a server before running the test', () => {
const options = {
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};
const testServer = https.createServer(options)
before((done) => {
testServer.listen(3000, done)
})
Контролі інформаційної безпеки
1. Впровадження HTTPS: Використання HTTPS (HTTP через SSL/TLS) для шифрування даних, що передаються мережею, забезпечує безпечний зв'язок, запобігає підслуховуванню та несанкціонованому доступу до конфіденційної інформації.
2. HSTS (HTTP Strict Transport Security): Впровадження заголовків HSTS для забезпечення використання HTTPS у веб-браузерах, запобігає атакам на зниження рівня безпеки та встановлення безпечних з'єднань протягом певного періоду часу.
Перевірка виправлення вразливостей
Після виправлення вище наведених вразливостей проводимо повторне сканування коду, щоб переконатись, що вразливості дійсно зникли:
Було:
Стало:
/
/
Як можемо бачити, вразливості усунені.
Висновки
Під час виконання даної лабораторної роботи я навчився усувати вразливості виявлені за допомогою Fortify on Demand на основі наданих системою рекомендацій.