」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為開發人員和安全團隊提供主動的 AppSec 持續漏洞管理

為開發人員和安全團隊提供主動的 AppSec 持續漏洞管理

發佈於2024-11-06
瀏覽:512

现代软件开发环境中哪些日益增长的网络安全风险让 CISO 忙碌?

开发人员和安全团队面临着越来越多的威胁,从复杂的开源和供应商控制的供应链攻击到 AI 生成的代码引入的漏洞,例如提示注入和 GitHub Copilot 的代码安全性差。现代应用程序通常严重依赖开源组件(例如在 npm、PyPI 或 RubyGems 上找到的组件)和容器化部署,其复杂性增加了挑战。 

考虑到这些风险的规模和复杂性,自动化漏洞管理变得至关重要。手动网络安全流程根本无法跟上潜在漏洞和软件开发的数量和速度。自动化不仅可以加快安全问题的识别和修复速度,还可以确保安全团队定期遵循的这些流程在软件开发生命周期的所有阶段得到一致应用。

特定领域持续漏洞管理的重要性

  • 对开源组件的依赖日益增加:开源组件在现代软件开发中已经变得无处不在。虽然这些组件加速了应用程序开发人员的开发并有助于降低成本,但它们也带来了重大的安全风险。 XZ 后门和 SolarWinds 漏洞等备受瞩目的供应链攻击凸显了当开源依赖项和封闭供应商控制组件中的漏洞被利用时可能造成广泛损害。
  • 在开发中越来越多地使用人工智能生成的代码:生成式人工智能(GenAI)在软件开发中的兴起既带来了机遇,也带来了挑战。 GenAI 可以显着加快编码任务的速度,但它也可能引入新的漏洞。人工智能生成的代码可能缺乏经验丰富的开发人员通常考虑的安全考虑因素,从而导致潜在的安全漏洞。其中一个例子是 GitHub Copilot 在 React 中引入了 XSS。
  • 容器化应用程序的快速增长:容器化应用程序已成为部署现代软件的规范。容器提供了许多好处,包括跨环境的一致性和易于扩展。然而,它们也带来了新的安全挑战,特别是在管理容器镜像内的漏洞方面。因此,开发人员可以利用帮助来教育他们如何选择最佳容器镜像和一般容器专业技巧,但自动化 docker 容器镜像漏洞是必须的。

让我们进一步分解一下……备受瞩目的供应链攻击的另一个例子是对 Codecov 的攻击,攻击者通过利用流行代码覆盖工具中的漏洞来访问敏感数据。开发人员的日常工作包括管理与开源依赖项相关的风险。开源依赖项可能会给您的代码库带来直接和传递的漏洞。直接漏洞存在于您明确包含的库中,而传递漏洞则存在于这些库的依赖项中。手动管理这些风险是一项艰巨的任务,因此自动化成为强大安全策略的关键组成部分。

借助 GenAI,GitHub Copilot 或 ChatGPT 等 AI 代码助手会引入真实的潜在漏洞。 GenAI 可能会无意中引入不安全的编码实践或无法识别特定于上下文的安全要求。例如,AI 模型可能生成容易受到 SQL 注入或跨站点脚本 (XSS) 攻击的代码。因此,监控和保护人工智能生成的代码对于维护应用程序安全至关重要。 

安全团队也无法逃脱应对新容器漏洞的复杂性。新容器漏洞的快速出现可能令人难以承受。每个新漏洞都需要及时识别和修复,以防止潜在的漏洞利用。这种复杂性需要具有安全专业知识的自动化解决方案来有效管理容器安全。

容器漏洞可能会对应用程序的整体安全性产生重大影响。单个易受攻击的容器映像可能会危及整个应用程序堆栈。 Snyk Container 等工具可以自动识别和修复容器映像中的漏洞。 Snyk Container 可以建议新的基础映像标签,以最大限度地减少漏洞数量并自动执行 Pull 请求来更新您的代码存储库。

我们如何缓解所有这些 AppSec 网络安全威胁?

使用 Snyk 进行主动 AppSec 和持续漏洞管理

为了减轻与 AI 生成代码相关的风险,请考虑使用 Snyk Code 等工具。这种快速的 SAST 工具由 Snyk DeepCode AI 提供支持,可以通过插件直接集成到开发人员的 IDE 中。它使用特定于安全的数据训练来识别易受攻击和不安全的代码,确保在开发早期发现并解决问题。

Snyk DeepCode AI 入门非常简单。该插件支持流行的 IDE,例如 Visual Studio Code、IntelliJ IDEA、VS Code 和 PyCharm。 

在 Visual Studio Code 中安装和集成 Snyk DeepCode AI 的快速指南

  1. 安装 Snyk 扩展:
  • 打开 Visual Studio Code。
  • 通过单击窗口一侧活动栏中的扩展图标导航到扩展视图。
  • 搜索“Snyk”并单击 Snyk 扩展上的“安装”。
  1. 使用 Snyk 进行身份验证:
  • 安装后,系统将提示您使用 Snyk 帐户进行身份验证。
  • 按照屏幕上的说明在此处登录或注册。
  1. 启用 Snyk DeepCode AI:
  • 经过身份验证后,导航到活动栏中的 Snyk 视图。
  • 启用 Snyk DeepCode AI 开始扫描您的代码是否存在漏洞。

安装后,侧边栏上的 Snyk 徽标将显示在您的开源依赖项、您自己的代码(或 GenAI 生成的代码)以及 IaC 问题中发现的漏洞和安全问题。

Proactive AppSec continuous vulnerability management for developers and security teams

SAST 工具在为开发人员识别 IDE 中不安全代码模式方面的优势

  1. 实时反馈:当您编写代码时,Snyk DeepCode AI 会实时分析代码,提供有关潜在安全问题的即时反馈。这使得开发人员能够在漏洞在代码库中根深蒂固之前解决它们。
  2. 人工智能驱动的见解:人工智能模型在大量特定安全数据的数据集上进行训练,使其能够识别不安全的编码模式,甚至是 GenAI 引入的编码模式或不良编程实践。
  3. 无缝集成:通过直接集成到 IDE 中,Snyk DeepCode AI 自然地融入开发人员的工作流程,最大限度地减少干扰并最大限度地提高生产力。

让我们看一下 GenAI 引入的缓解漏洞的示例。我在此项目中使用 GitHub Copilot 自动完成代码,该代码创建 Express POST 端点路由来查询 OpenAI API,然后使用 res.send() 将响应发送到浏览器。

但是,如果此有效负载中的响应直接在浏览器中呈现怎么办?如果使用默认的 text/html 内容类型标头发送此请求,则跨站点脚本漏洞将影响正在运行的应用程序。对此我们能做什么?

Proactive AppSec continuous vulnerability management for developers and security teams
正如您在第 31 行上方的注释中看到的,Snyk 建议修复此安全问题。我点击了它,几秒钟之内,Snyk DeepCode AI 扩展提出了一种缓解措施,将 res.send() 替换为 res.json,如下所示:

res.json(response.choices[0].message.content);

通过此更改,Express 应用程序强制响应中的内容类型为 application/json,它是通用文本,并且可以允许诸如alert()之类的文本。

通过在 IDE 中利用 Snyk,开发人员可以使用底层 Snyk DeepCode AI 引擎主动识别和缓解漏洞,确保他们的代码从一开始就是安全的。这种主动的应用程序安全方法在当今环境中至关重要,因为与开源供应链和 GenAI 生成的代码相关的风险始终存在。

使用 Snyk Open Source 自动化依赖管理

Snyk Open Source 是一款功能强大的工具,旨在帮助开发人员和安全团队管理与开源依赖项相关的风险。随着对开源库的依赖日益增加,对强大且自动化的依赖关系管理的需求变得前所未有的迫切。 Snyk Open Source 提供全面的漏洞扫描和修复功能,确保您的项目保持安全和合规。

在我之前的 Node.js 应用程序中,我还使用了 SQLite 依赖项,Snyk 提醒我存在安全问题,如下所示:

Proactive AppSec continuous vulnerability management for developers and security teams
此漏洞信息有助于了解哪些传递依赖项引入了安全风险以及如何减轻风险(如果可能)。在这种情况下,检测到传递依赖存在中等漏洞。

Snyk 检测到我的锁定文件和依赖项可能已过期,因此无法找到修复路径。不过,让我们看看将 GitHub 代码存储库导入到 Snyk 时的实际自动化情况。这样做会在 Snyk 应用程序上显示以下信息:

Proactive AppSec continuous vulnerability management for developers and security teams
从此时起,当我的包清单中检测到安全漏洞时,Snyk 将自动打开新的 Pull 请求来建议依赖项升级。

管理依赖项不仅仅涉及您直接包含在项目中的库。传递依赖项(由直接依赖项引入的依赖项)也可能会引入漏洞。 Snyk 擅长识别和修复直接依赖和传递依赖中的漏洞。

考虑以下场景:

{
  "dependencies": {
    "express": "^4.17.1",
    "lodash": "^4.17.20"
  }
}

在此示例中,express 和 lodash 是直接依赖项。但是,express 可能有自己的一组依赖项,而这些依赖项又可能有自己的依赖项。 Snyk 将遍历整个依赖关系树,识别并解决各个级别的漏洞。

在管理容器漏洞时,Snyk Container 有助于消除使用安全补丁使基础镜像标签保持最新状态的负担。

Snyk Container 是一个全面的解决方案,旨在帮助开发人员和安全团队有效管理容器漏洞。容器化应用程序工作负载在企业中很普遍,并且需要保护这些环境。 Snyk Container 无缝集成到您的 CI/CD 管道中,提供对容器映像中漏洞的持续监控和主动修复。

Snyk Container 的突出功能之一是它能够自动创建 Pull 请求以解决容器映像中的漏洞。这种自动化对于开发人员和安全团队来说都是一个游戏规则改变者,因为它显着减少了保持容器映像安全所需的手动工作。

以下是 Snyk Container 如何自动执行 PR 来更新 Dockerfile 中易受攻击的包的示例:

FROM node:14.1.0
RUN npm install express
COPY . /app
CMD ["node", "/app/index.js"]

当 Snyk Container 检测到漏洞时,它会自动生成 PR 并进行必要的更改以缓解问题。这可能包括更新易受攻击的软件包或应用安全补丁。通过自动化此过程,Snyk Container 可确保及时解决漏洞,从而缩短暴露时间。

Proactive AppSec continuous vulnerability management for developers and security teams
通过遵循这些推荐的基础镜像,您可以显着减少容器镜像中的漏洞数量,从而增强应用程序的整体安全性。

Proactive AppSec continuous vulnerability management for developers and security teams
Snyk Container 识别出此基础映像中的多个漏洞,并自动生成 PR 来更新映像和相关依赖项。该团队能够快速审查和合并这些 PR,通过合并 Pull 请求并确保 CI/CD 管道测试顺利通过,几秒钟内将漏洞数量减少了 30% 以上。

Proactive AppSec continuous vulnerability management for developers and security teams
这种主动的方法不仅改善了应用程序的安全状况,还为开发人员腾出了宝贵的时间来专注于构建新功能而不是管理漏洞。

版本聲明 本文轉載於:https://dev.to/snyk/proactive-appsec-continuous-vulnerability-management-for-developers-and-security-teams-49he?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何使用預先匯入的套件啟動 python 或 ipython。
    如何使用預先匯入的套件啟動 python 或 ipython。
    不必每次執行 python 或 ipython 時都必須編寫“import os”或其他常見包,此腳本將啟動 python 並導入這些包 #!/usr/bin/env bash # -----------------------------------------------------------...
    程式設計 發佈於2024-11-06
  • python中的資料類型
    python中的資料類型
    內建資料型別 文字類型:字串 數值類型:int、float、complex 序列類型:清單、元組、範圍 映射類型:字典 集合類型:集合、凍結集合 布林類型:bool 二進位類型:位元組、位元組數組、記憶體視圖 無型別:無型別 程式 a=「阿維納什」 印刷(類型(a)) b=45 印刷(類型(b)) ...
    程式設計 發佈於2024-11-06
  • JavaScript 中的提升
    JavaScript 中的提升
    什么是 JavaScript 提升? 提升是指 JavaScript 中在执行之前进行声明的过程。首先处理变量和函数声明。因此,即使变量在声明之前被引用,也不会导致错误,而是返回 undefined。对于函数声明,整个函数被提升,这意味着它可以在代码中定义之前使用。此过程在执行开始...
    程式設計 發佈於2024-11-06
  • 如何在 Go 中同時選擇緩衝發送和無緩衝接收通道?
    如何在 Go 中同時選擇緩衝發送和無緩衝接收通道?
    同時選擇 Go 發送和接收通道在 Go 中,可以使用 select 語句在通道上執行非阻塞 I/O 操作。然而,在處理緩衝發送通道(chan
    程式設計 發佈於2024-11-06
  • 如何將列表列表轉換為統一的 NumPy 陣列?
    如何將列表列表轉換為統一的 NumPy 陣列?
    將清單清單轉換為NumPy 陣列資料分析中的一個常見任務是將清單清單轉換為NumPy 陣列高效率的數值運算。這個數組可以透過將每個列表分配給一行來形成,列表中的每個元素佔據一列。 選項 1:陣列陣列如果子清單有不同的長度,適當的方法是建立陣列的陣列。這保留了清單清單的原始結構,從而可以輕鬆檢索特定元...
    程式設計 發佈於2024-11-06
  • 前端的頂級設計模式
    前端的頂級設計模式
    在过去的几个月里,我为前端开发人员分享了一些流行的设计模式。其中包括 Singleton、Facade、Observer、Publisher/Subscriber 等模式。今天,我想总结一下这些模式的一些要点和好处,以及如何使用它们来改进您的前端开发流程。 什么是设计模式 设计模式是...
    程式設計 發佈於2024-11-06
  • ServBay版本.pdate公告
    ServBay版本.pdate公告
    我們很高興地宣布新版本 1.4.4 已經到來!讓我們來看看新增的備受期待的新功能。 新功能 CA和憑證管理: 統一SSL憑證管理平台:全新的憑證管理平台,旨在簡化憑證申請與管理流程。 ServBay User CA 和 ServBay Public CA: 引入 ...
    程式設計 發佈於2024-11-06
  • Spring框架中的控制反轉
    Spring框架中的控制反轉
    控制反转(IoC)和依赖注入(DI)是Spring框架中的两个基本概念。传统上,对象负责创建和管理它们自己的依赖关系。然而,IoC 通过将对象创建和依赖管理的控制权移交给像 Spring 这样的框架来翻转这一责任。 这种转变有几个优点: 更简单的实现交换:只需对代码库进行最小的更改即可交换不同的实现...
    程式設計 發佈於2024-11-06
  • 使用 React 建立遞歸檔案系統:深入探討
    使用 React 建立遞歸檔案系統:深入探討
    簡介:在 React 中建構遞歸檔案系統 在現代 Web 開發中,建立互動式動態檔案系統是常見的要求。無論是管理文件、組織專案或建構複雜的資料結構,擁有強大的文件系統都至關重要。在這篇文章中,我們將探討如何在 React 中建立遞歸檔案系統,並專注於可以新增、重新命名或刪除的嵌套資...
    程式設計 發佈於2024-11-06
  • SQL 查詢速度慢?使用此技術提高應用程式的效能
    SQL 查詢速度慢?使用此技術提高應用程式的效能
    挑戰 在我的應用程式(React Spring Boot Oracle)中,處理大型資料集導致處理時間極為緩慢。我需要一種解決方案來提高效能而不影響準確性或完整性。 解決方案:NTILE 並行處理 NTILE 是一個功能強大的 SQL 視窗函數,旨在將結果集劃分為...
    程式設計 發佈於2024-11-06
  • 關於測試覆蓋率的真相
    關於測試覆蓋率的真相
    一個強而有力的真理。 看下面這段簡單明了的程式碼: function sum(a, b) { return a b; } 現在,讓我們為它寫一些測試: test('sum', () => { expect(sum(1, 2)).toBe(3); expect(...
    程式設計 發佈於2024-11-06
  • 為什麼我的 OpenGL 三角形無法在 Go 中渲染?調查頂點緩衝區問題。
    為什麼我的 OpenGL 三角形無法在 Go 中渲染?調查頂點緩衝區問題。
    Go 中的OpenGL 頂點緩衝區問題在Go 中嘗試使用OpenGL 顯示三角形時,使用者遇到了頂點緩衝區問題緩衝區無法渲染形狀。 Go 程式碼源自於教程,但與 C 程式碼不同的是,它沒有產生任何輸出。 問題原因問題的根本原因位於傳遞給 vertexAttrib.AttribPointer() 的參...
    程式設計 發佈於2024-11-06
  • 為什麼在 Linux 32 位元發行版上的 Go 程式中設定 `ulimit -n` 會導致「參數無效」錯誤?
    為什麼在 Linux 32 位元發行版上的 Go 程式中設定 `ulimit -n` 會導致「參數無效」錯誤?
    如何在 Go 程式中設定 ulimit -n? 問題使用者嘗試在 Go 程式中設定 ulimit -n使用 setrlimit 和 getrlimit 系統呼叫將其限制在程式內而不是全域。然而,在嘗試設定該值時出現錯誤,提示「參數無效」。 解決方案發現問題是由於 Linux 32 的 Getrlim...
    程式設計 發佈於2024-11-06
  • 如何在Python中創建無限深度的動態嵌套字典?
    如何在Python中創建無限深度的動態嵌套字典?
    未定義深度的動態嵌套字典在涉及複雜多層資料結構的場景中,經常會遇到變數嵌套字典的需求水平。雖然硬編碼插入語句是一種潛在的解決方案,但當事先未知嵌套深度時,這種方法是不切實際的。 要克服此限制,請考慮利用 Python 的 collections.defaultdict,它允許動態建立字典。可以使用下...
    程式設計 發佈於2024-11-06
  • Python 變得強大:輕鬆程式設計的初學者指南
    Python 變得強大:輕鬆程式設計的初學者指南
    Python 是一門強大的程式語言,文法簡單,應用廣泛。安裝 Python 後,可以學習其基本語法,包括變數賦值、資料類型和流程控制。實戰案例中,我們透過蒙特卡羅模擬計算圓周率,展示了 Python 在數值計算中的能力。此外,Python 擁有豐富的函式庫,涵蓋機器學習、資料分析和網路開發等領域,體...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3