精华内容
下载资源
问答
  • 企业安全生产主体责任清单及对标检查手册(试行).docx
  • nodejs安全清单

    千次阅读 2017-03-13 13:48:19
    所以我们列出了这个清单,让你在将你的应用部署到生产环境来给千万用户使用之前,做一个安全检查。 以下列出的安全项,大多都具有普适性,适用于除了Node.js外的各种语言和框架。但是,其中也包含一些用Node.js写...

    前言

    安全性,总是一个不可忽视的问题。许多人都承认这点,但是却很少有人真的认真地对待它。所以我们列出了这个清单,让你在将你的应用部署到生产环境来给千万用户使用之前,做一个安全检查。

    以下列出的安全项,大多都具有普适性,适用于除了Node.js外的各种语言和框架。但是,其中也包含一些用Node.js写的小工具。

    配置管理

    安全性相关的HTTP头

    以下是一些安全性相关的HTTP头,你的站点应该设置它们:

    • Strict-Transport-Security:强制使用安全连接(SSL/TLS之上的HTTPS)来连接到服务器。

    • X-Frame-Options:提供对于“点击劫持”的保护。

    • X-XSS-Protection:开启大多现代浏览器内建的对于跨站脚本攻击(XSS)的过滤功能。

    • X-Content-Type-Options: 防止浏览器使用MIME-sniffing来确定响应的类型,转而使用明确的content-type来确定。

    • Content-Security-Policy:防止受到跨站脚本攻击以及其他跨站注入攻击。

    Node.js中,这些都可以通过使用Helmet模块轻松设置完毕:

    1. var express = require('express');
    2. var helmet = require('helmet');
    3. var app = express();
    4. app.use(helmet());

    Helmet在Koa中也能使用:koa-helmet

    当然,在许多的架构中,这些头会在Web服务器(Apache,nginx)的配置中设置,而不是在应用的代码中。如果是通过nginx配置,配置文件会类似于如下例子:

    1. # nginx.conf
    2. add_header X-Frame-Options SAMEORIGIN;
    3. add_header X-Content-Type-Options nosniff;
    4. add_header X-XSS-Protection "1; mode=block";
    5. add_header Content-Security-Policy "default-src 'self'";

    完整的例子可以参考这个nginx配置

    如果你想快速确认你的网站是否都设置这些HTTP头,你可以通过这个网站在线检查:http://cyh.herokuapp.com/cyh 。

    客户端的敏感数据

    当部署前端应用时,确保不要在代码中暴露如密钥这样的敏感数据,这将可以被所有人看到。

    现今并没有什么自动化检测它们的办法,但是还是有一些手段可以用来减少不小心将敏感数据暴露在客户端的概率:

    • 使用pull request更新代码

    • 建立起code review机制

    身份认证

    对于暴力破解的保护

    暴力破解即系统地列举所有可能的结果,并逐一尝试,来找到正确答案。在web应用中,用户登陆就特别适合它发挥。

    你可以通过限制用户的连接频率来防止这类的攻击。在Node.js中,你可以使用ratelimiter包。

    1. var email = req.body.email;
    2. var limit = new Limiter({ id: email, db: db });
    3. limit.get(function(err, limit) {
    4. });

    当然,你可以将它封装成一个中间件以供你的应用使用。ExpressKoa都已经有现成的不错的中间件:

    1. var ratelimit = require('koa-ratelimit');
    2. var redis = require('redis');
    3. var koa = require('koa');
    4. var app = koa();
    5. var emailBasedRatelimit = ratelimit({
    6. db: redis.createClient(),
    7. duration: 60000,
    8. max: 10,
    9. id: function (context) {
    10. return context.body.email;
    11. }
    12. });
    13. var ipBasedRatelimit = ratelimit({
    14. db: redis.createClient(),
    15. duration: 60000,
    16. max: 10,
    17. id: function (context) {
    18. return context.ip;
    19. }
    20. });
    21. app.post('/login', ipBasedRatelimit, emailBasedRatelimit, handleLogin);

    这里我们所做的,就是限制了在一段给定时间内,用户可以尝试登陆的次数 -- 这减少用户密码被暴力破解的风险。以上例子中的选项都是可以根据你的实际情景所改变的,所以不要简单的复制粘贴它们。。

    如果你想要测试你的服务在这些场景下的表现,你可以使用hydra

    Session管理

    对于cookie的安全使用,其重要性是不言而喻的。特别是对于动态的web应用,在如HTTP这样的无状态协议的之上,它们需要使用cookie来维持状态。

    Cookie标示

    以下是一个每个cookie可以设置的属性的列表,以及它们的含义:

    • secure - 这个属性告诉浏览器,仅在请求是通过HTTPS传输时,才传递cookie。

    • HttpOnly - 设置这个属性将禁止javascript脚本获取到这个cookie,这可以用来帮助防止跨站脚本攻击。

    Cookie域

    • domain - 这个属性用来比较请求URL中服务端的域名。如果域名匹配成功,或这是其子域名,则继续检查path属性。

    • path - 除了域名,cookie可用的URL路径也可以被指定。当域名和路径都匹配时,cookie才会随请求发送。

    • expires - 这个属性用来设置持久化的cookie,当设置了它之后,cookie在指定的时间到达之前都不会过期。

    Node.js中,你可以使用cookies包来轻松创建cookie。但是,它是较底层的。在创建应用时,你可能更像使用它的一些封装,如cookie-session 。

    1. var cookieSession = require('cookie-session');
    2. var express = require('express');
    3. var app = express();
    4. app.use(cookieSession({
    5. name: 'session',
    6. keys: [
    7. process.env.COOKIE_KEY1,
    8. process.env.COOKIE_KEY2
    9. ]
    10. }));
    11. app.use(function (req, res, next) {
    12. var n = req.session.views || 0;
    13. req.session.views = n++;
    14. res.end(n + ' views');
    15. });
    16. app.listen(3000);

    (以上例子取自cookie-session模块的文档)

    CSRF

    跨站请求伪造(CSRF)是一种迫使用户在他们已登录的web应用中,执行一个并非他们原意的操作的攻击手段。这种攻击常常用于那些会改变用户的状态的请求,通常它们并不窃取数据,因为攻击者并不能看到响应的内容。

    Node.js中,你可以使用csrf模块来缓和这种攻击。它同样是非常底层的,你可能更喜欢使用如csurf这样的Express中间件。

    在路由层,可以会有如下代码:

    1. var cookieParser = require('cookie-parser');
    2. var csrf = require('csurf');
    3. var bodyParser = require('body-parser');
    4. var express = require('express');
    5. // setup route middlewares
    6. var csrfProtection = csrf({ cookie: true });
    7. var parseForm = bodyParser.urlencoded({ extended: false });
    8. // create express app
    9. var app = express();
    10. // we need this because "cookie" is true in csrfProtection
    11. app.use(cookieParser());
    12. app.get('/form', csrfProtection, function(req, res) {
    13. // pass the csrfToken to the view
    14. res.render('send', { csrfToken: req.csrfToken() });
    15. });
    16. app.post('/process', parseForm, csrfProtection, function(req, res) {
    17. res.send('data is being processed');
    18. });

    在展示层,你需要使用CSRF token

    1. <form action="/process" method="POST">
    2. <input type="hidden" name="_csrf" value="{{csrfToken}}">
    3. Favorite color: <input type="text" name="favoriteColor">
    4. <button type="submit">Submit</button>
    5. </form>

    (以上例子取自csurf模块的文档)

    数据合法性

    XSS

    以下是两种类似的,但是略有不同的攻击方式,一种关于跨站脚本,而另一种则关于存储。

    • 非持久化的XSS攻击 在攻击者向指定的URL的响应HTML中注入可执行的JavaScript代码时发生。

    • 持久化的XSS攻击 在应用存储未经过滤的用户输入时发生。用户输入的代码会在你的应用环境下执行。

    为了防御这类攻击,请确保你总是检查并过滤了用户的输入内容。

    SQL注入

    在用户的输入中包含部分或完整的SQL查询语句时,SQL注入就有可能发生。它可能会读取敏感数据,或是直接删除数据。

    例如:

    1. select title, author from books where id=$id

    以上这个例子中,$id来自于用户输入。用户输入2 or 1=1也可以。这个查询可能会变成:

    1. select title, author from books where id=2 or 1=1

    最简单的预防方法则是使用参数化查询(parameterized queries)或预处理语句(prepared statements)。

    如果你正在通过Node.js使用PostgreSQL。那么你可以使用node-postgres模块,来创建参数化查询:

    1. var q = 'SELECT name FROM books WHERE id = $1';
    2. client.query(q, ['3'], function(err, result) {});

    命令注入

    攻击者使用命令注入来在远程web服务器中运行系统命令。通过命令注入,攻击者甚至可以取得系统的密码。

    实践中,如果你有一个URL:

    1. https://example.com/downloads?file=user1.txt

    它可以变成:

    1. https://example.com/downloads?file=%3Bcat%20/etc/passwd

    在这个例子中,%3B会变成一个分号。所以将会运行多条系统命令。

    为了预防这类攻击,请确保总是检查过滤了用户的输入内容。

    我们也可以以Node.js的角度来说:

    1. child_process.exec('ls', function (err, data) {
    2. console.log(data);
    3. });

    child_process.exec的底层,它调用了/bin/sh,所以它是一个bash解释器,而不仅仅是只能执行用户程序。

    当用户的输入是一个反引号或$()时,将它们传入这个方法就很危险了。

    可以通过使用child_process.execFile来解决上面这个问题。

    安全传输

    SSL版本,算法,键长度

    由于HTTP是明文传输的,所以我们需要通过一个SSL/TLS通道来加密,即HTTPS。如今高级别的加密方式已被普遍使用,但是,如果在服务端缺乏配置,也可能会导致服务端使用低级别的加密,或不加密。

    你需要测试:

    • 密码,密钥和重协商(renegotiation)都已经合法妥善得配置完毕。

    • 证书的合法性。

    使用如nmapsslyze这样的工具可以使这项工作非常简单。

    检查证书信息

    1. nmap --script ssl-cert,ssl-enum-ciphers -p 443,465,993,995 www.example.com

    使用sslyze来检查SSL/TSL:

    1. ./sslyze.py --regular example.com:443

    HSTS

    在上文的配置管理章节我们已经对其有了接触 - Strict-Transport-Security头会强制使用HTTPS来连接服务器。以下是一个Twitter的例子:

    1. strict-transport-security:max-age=631138519

    这里的max-age定义了浏览器需要自动将所有HTTP请求转换成HTTPS的秒数。

    对于它的测试是非常简单的:

    1. curl -s -D- https://twitter.com/ | grep -i Strict

    拒绝服务

    账号锁定

    账号锁定用于缓和暴力破解带来的拒绝服务方面的影响。实践中,它意味着,当用户尝试了几次登陆并失败后,将在其后的一段内,禁止他的登陆操作。

    可以使用之前提到的rate-limiter来阻止这类攻击。

    正则表达式

    这类攻击主要是由于一些正则表达式,在极端情况下,会变得性能及其糟糕。这些正则被称为恶魔正则(Evil Regexes):

    • 对于重复文本进行分组

    • 在重复的分组内又有重复内容

      ([a-zA-Z]+)*, (a+)+ 或 (a|a?)+在如aaaaaaaaaaaaaaaaaaaaaaaa! 这样的输入面前,都是脆弱的。这会引起大量的计算。更多详情可以参考ReDos

    可以使用Node.js工具safe-regex这检测你的正则:

    1. $ node safe.js '(beep|boop)*'
    2. true
    3. $ node safe.js '(a+){10}'
    4. false

    错误处理

    错误码,堆栈信息

    一些错误场景可能会导致应用泄露底层的应用架构信息,如:like: X-Powered-By:Express

    堆栈信息可能自己本身并没有什么用,但它经常能泄露一些攻击者非常感兴趣的信息。将堆栈信息返回出来是非常不好的实践。你需要将它们记录在日志中,而不是展示给用户。

    NPM

    更强的能力意味着更大的责任 - NPM有这许多可以现成使用的包,但是代价是:你需要检查这些包本身是否存在安全问题。

    幸运的是Node Security project(nsp)是一个非常棒的工具,来检查你使用的模块是否是易被一些已知的手段攻击的。

    1. npm i nsp -g
    2. # either audit the shrinkwrap
    3. nsp audit-shrinkwrap
    4. # or the package.json
    5. nsp audit-package

    最后

    这个清单主要根据OWASP维护的Web Application Security Testing Cheat Sheet所列。


    原文地址  https://linux.cn/article-6417-1.html

    展开全文
  • 基于Electron的CS客户端-安全设计清单

    千次阅读 2020-09-28 17:49:26
    Electron 安全检查清单 0x00背景 如果你可以建一个网站,你就可以建一个桌面应用程序。 Electron 是一个使用 JavaScript, HTML 和 CSS 等 Web 技术创建原生程序的框架,它负责比较难搞的部分,你只需把精力放在你...

    0x00背景

      如果你可以建一个网站,你就可以建一个桌面应用程序。 Electron 是一个使用 JavaScript, HTML 和 CSS 等 Web 技术创建原生程序的框架,它负责比较难搞的部分,你只需把精力放在你的应用的核心上即可。

      简单来说,Electron 基于 Chromium 和 Node.js, 让你可以使用 HTML, CSS 和 JavaScript 构建应用。把一个浏览器的标签视图去掉,并且只限定访问特定的网页。

    0x01 安全性,原生能力和你的责任

    Web开发人员通常享有浏览器强大的网络安全特性,而自己的代码风险相对较小。 我们的网站在沙盒中被授予有限的权限,我们相信用户会喜欢由大型工程师团队构建的浏览器,该浏览器能够快速响应新发现的安全威胁。

    当使用 Electron 时,很重要的一点是要理解 Electron 不是一个 Web 浏览器。 它允许您使用熟悉的 Web 技术构建功能丰富的桌面应用程序,但是您的代码具有更强大的功能。 JavaScript 可以访问文件系统,用户 shell 等。 这允许您构建更高质量的本机应用程序,但是内在的安全风险会随着授予您的代码的额外权力而增加。

    考虑到这一点,请注意,展示任意来自不受信任源的内容都将会带来严重的安全风险,而这种风险Electron也没打算处理。 事实上,最流行的 Electron 应用程序(Atom,Slack,Visual Studio Code 等) 主要显示本地内容(即使有远程内容也是无 Node 的、受信任的、安全的内容) - 如果您的应用程序要运行在线的源代码,那么您需要确保源代码不是恶意的。

    报告安全问题

    有关如何正确上报 Electron 漏洞的信息,参阅 SECURITY.md

    Chromium 安全问题和升级

    Electron和Chromium同步更新。 有关更多信息,请参见《 Electron Release Cadence》博客文章。

    安全是所有人的共同责任

    重要的是要记住,Electron应用程序的安全性是框架基础(Chromium,Node.js),Electron本身,所有NPM依赖项和代码的整体安全性的结果。因此,你有责任遵循下列安全守则:

    1. 使用最新版的 Electron 框架搭建你的程序。你最终发行的产品中会包含 Electron、Chromium 共享库和 Node.js 的组件。 这些组件存在的安全问题也可能影响你的程序安全性。 你可以通过更新Electron到最新版本来确保像是nodeIntegration绕过攻击一类的严重漏洞已经被修复因而不会影响到你的程序。 请参阅“使用当前版本的Electron”以获取更多信息。
    2. 评估你的依赖项目NPM提供了五百万可重用的软件包,而你应当承担起选择可信任的第三方库。 如果你使用了受已知漏洞的过时的库,或是依赖于维护的很糟糕的代码,你的程序安全就可能面临威胁。
    3. 遵循安全编码实践你的代码是你的程序安全的第一道防线。 一般的网络漏洞,例如跨站脚本攻击(Cross-Site Scripting, XSS),对Electron将造成更大的影响,因此非常建议你遵循安全软件开发最佳实践并进行安全性测试。

    隔离不信任的内容

    每当你从不被信任的来源(如一个远程服务器)获取代码并在本地执行,其中就存在安全性问题。 例如在默认的 BrowserWindow中显示一个远程网站. 如果攻击者以某种方式设法改变所述内容 (通过直接攻击源或者通过在应用和实际目的地之间进行攻击) ,他们将能够在用户的机器上执行本地代码。

    ⚠️无论如何,在启用Node.js集成的情况下,你都不该加载并执行远程代码。 相反,只使用本地文件(和您的应用打包在一起)来执行Node.js代码 如果你想要显示远程内容,请使用 <webview> Tag或者 BrowserView,并确保禁用 nodeIntegration 并启用 contextIsolation

    Electron 安全警告

    从Electron 2.0版本开始,开发者将会在开发者控制台看到打印的警告和建议。 这些警告仅在可执行文件名为 Electron 时才会为开发者显示。

    你可以通过在process.env 或 window对象上配置ELECTRON_ENABLE_SECURITY_WARNINGS 或ELECTRON_DISABLE_SECURITY_WARNINGS来强制开启或关闭这些警告。

    0x02 清单:安全建议

    为加强程序安全性,你至少应当遵循下列规则:

    1. 只加载安全的内容
    2. 禁止在所有渲染器中使用Node.js集成显示远程内容
    3. 做所有显示远程内容的渲染器中启用上下文隔离。
    4. 在所有加载远程内容的会话中使用 ses.setPermissionRequestHandler().
    5. 不要禁用 webSecurity
    6. 定义一个Content-Security-Policy并设置限制规则(如:script-src 'self')
    7. 不要设置 allowRunningInsecureContent 为 true.
    8. 不要开启实验性功能
    9. 不要使用enableBlinkFeatures
    10. <webview>:不要使用 allowpopups 
    11. <webview>:验证选项与参数
    12. 禁用或限制网页跳转
    13. 禁用或限制新窗口创建
    14. 不要对不可信的内容使用 openExternal
    15. 禁用 remote 模块
    16. 限制 remote 模块
    17. 使用当前版本的 Electron

    如果你想要自动检测错误的配置或是不安全的模式,可以使用electronegativity 关于在使用Electron进行应用程序开发中的潜在薄弱点或者bug,您可以参考开发者与审核人员指南

    1) 仅加载安全内容

    任何不属于你的应用的资源都应该使用像HTTPS这样的安全协议来加载。 换言之, 不要使用不安全的协议 (如 HTTP)。 同理,我们建议使用WSS,避免使用WS,建议使用FTPS ,避免使用FTP,等等诸如此类的协议。

    为什么?

    HTTPS 有三个主要好处:

    1) 它对远程服务器进行身份验证, 确保您的应用程序连接到正确的主机而不是模仿器。 2) 确保数据完整性, 断言数据在应用程序和主机之间传输时未被修改。 3) 它对用户和目标主机之间的通信进行加密, 从而更难窃听应用程序和主机之间发送的信息。

    怎么做?

    // 不推荐

    browserWindow.loadURL ('http://example.com')// 推荐

    browserWindow.loadURL ('https://example.com')

     

    <!-- Bad --><script crossorigin src="http://example.com/react.js"></script><link rel="stylesheet" href="http://example.com/style.css">

    <!-- Good --><script crossorigin src="https://example.com/react.js"></script><link rel="stylesheet" href="https://example.com/style.css">

    2) 不要为远程内容启用 Node.js 集成

    This recommendation is the default behavior in Electron since 5.0.0.

    加载远程内容时,不论使用的是哪一种渲染器(BrowserWindowBrowserView 或者 <webview>),最重要的就是绝对不要启用 Node.js 集成。 其目的是限制您授予远程内容的权限, 从而使攻击者在您的网站上执行 JavaScript 时更难伤害您的用户。

    在此之后,你可以为指定的主机授予附加权限。 举例来说,如果你正在打开一个指向 https://example.com/ 的 BrowserWindow,那么你可以给他刚刚好足够的权限,但是绝对不要超出这个范围。

    为什么?

    如果攻击者跳过渲染进程并在用户电脑上执行恶意代码,那么这种跨站脚本(XSS) 攻击的危害是非常大的。 跨站脚本攻击很常见,通常情况下,威力仅限于执行代码的网站。 禁用Node.js集成有助于防止XSS攻击升级为“远程代码执行” (RCE) 攻击。

    怎么做?

    // 不推荐const mainWindow = new BrowserWindow({

      webPreferences: {

        nodeIntegration: true,

        nodeIntegrationInWorker: true

      }

    })

     

    mainWindow.loadURL('https://example.com')

     

    // 推荐const mainWindow = new BrowserWindow({

      webPreferences: {

        preload: path.join(app.getAppPath(), 'preload.js')

      }

    })

     

    mainWindow.loadURL('https://example.com')

     

    <!-- Bad --><webview nodeIntegration src="page.html"></webview>

    <!-- Good --><webview src="page.html"></webview>

     

    当禁用Node.js集成时,你依然可以暴露API给你的站点以使用Node.js的模块功能或特性。 预加载脚本依然可以使用require等Node.js特性, 以使开发者可以暴露自定义API给远程加载内容。

    在下面的预加载脚本例子中,后加载的网站内容可以使用window.readConfig()方法,但不能使用Node.js特性。

    const { readFileSync } = require('fs')

    window.readConfig = function () {

      const data = readFileSync('./config.json')

      return data

    }

     

    3) 为远程内容开启上下文隔离

    上下文隔离是Electron的一个特性,它允许开发者在预加载脚本里运行代码,里面包含Electron API和专用的JavaScript上下文。 实际上,这意味全局对象如 Array.prototype.push 或 JSON.parse等无法被渲染进程里的运行脚本修改。

    Electron使用了和Chromium相同的Content Scripts技术来开启这个行为。

    即使您使用选项 nodeIntegration: false 进行强制隔离并防止其使用Node原语,contextIsolation 也必须被启用。

    Why & How?

    For more information on what contextIsolation is and how to enable it please see our dedicated Context Isolation document.

    4) 处理来自远程内容的会话许可请求

    当你使用Chromes时,也许见过这种许可请求:每当网站尝试使用某个特性时,就会弹出让用户手动确认(如网站通知)

    此API基于Chromium permissions API,并已实现对应的许可类型。

    为什么?

    默认情况下,Electron将自动批准所有的许可请求,除非开发者手动配置一个自定义处理函数。 尽管默认如此,有安全意识的开发者可能希望默认反着来。

    怎么做?

    const { session } = require('electron')

     

    session

      .fromPartition('some-partition')

      .setPermissionRequestHandler((webContents, permission, callback) => {

        const url = webContents.getURL()

     

        if (permission === 'notifications') {

          // 通过许可请求

          callback(true)

        }

     

        // Verify URL

        if (!url.startsWith('https://example.com/')) {

          // 拒绝许可请求

          return callback(false)

        }

      })

    5) 不要禁用WebSecurity

    Electron的默认值就是建议值。

    在渲染进程(BrowserWindowBrowserView 和 <webview>)中禁用 webSecurity 将导致至关重要的安全性功能被关闭。

    不要在生产环境中禁用webSecurity。

    为什么?

    禁用 webSecurity 将会禁止同源策略并且将 allowRunningInsecureContent 属性置 true。 换句话说,这将使得来自其他站点的非安全代码被执行。

    怎么做?

    // 不推荐const mainWindow = new BrowserWindow({

      webPreferences: {

        webSecurity: false

      }

    })

    // 推荐const mainWindow = new BrowserWindow()

    <!-- Bad --><webview disablewebsecurity src="page.html"></webview>

    <!-- Good --><webview src="page.html"></webview>

    6) 定义一个内容安全策略

    内容安全策略(CSP) 是应对跨站脚本攻击和数据注入攻击的又一层保护措施。 我们建议任何载入到Electron的站点都要开启。

    为什么?

    CSP允许Electron通过服务端内容对指定页面的资源加载进行约束与控制。 如果你定义https://example.com这个源,所属这个源的脚本都允许被加载,反之https://evil.attacker.com不会被允许加载运行。 对于提升你的应用安全性,设置CSP是个很方便的办法。

    下面的CSP设置使得Electron只能执行自身站点和来自apis.example.com的脚本。

    // 不推荐

    Content-Security-Policy: '*'

    // 推荐

    Content-Security-Policy: script-src 'self' https://apis.example.comEN

    CSP HTTP头

    Electron 会处理 Content-Security-Policy HTTP 标头,它可以在 webRequest.onHeadersReceived 中进行设置:

    const { session } = require('electron')

     

    session.defaultSession.webRequest.onHeadersReceived((details, callback) => {

      callback({

        responseHeaders: {

          ...details.responseHeaders,

          'Content-Security-Policy': ['default-src \'none\'']

        }

      })

    })

    CSP元标签

    CSP的首选传递机制是HTTP报头,但是在使用file://协议加载资源时,不可能使用此方法。 It can be useful in some cases, such as using the file:// protocol, to set a policy on a page directly in the markup using a <meta> tag:

    <meta http-equiv="Content-Security-Policy" content="default-src 'none'">

    7) 不要设置allowRunningInsecureContenttrue

    Electron的默认值就是建议值。

    默认情况下,Electron不允许网站在HTTPS中加载或执行非安全源(HTTP) 中的脚本代码、CSS或插件。 将allowRunningInsecureContent属性设为true将禁用这种保护。

    当网站的初始内容通过HTTPS加载并尝试在子请求中加载HTTP的资源时,这被称为"混合内容"。

    为什么?

    通过HTTPS加载会将该资源进行加密传输,以保证其真实性和完整性。 参看只显示安全内容这节以获得更多信息。

    怎么做?

    // 不推荐const mainWindow = new BrowserWindow({

      webPreferences: {

        allowRunningInsecureContent: true

      }

    })

    // 推荐const mainWindow = new BrowserWindow({})

    8) 不要开启实验室特性

    Electron的默认值就是建议值。

    Electron 的熟练用户可以通过  experimentalFeatures 属性来启用 Chromium 实验性功能。

    为什么?

    尽管存在合理的使用场景,但是除非你知道你自己在干什么,否则你不应该开启这个属性。

    怎么做?

    // 不推荐const mainWindow = new BrowserWindow({

      webPreferences: {

        experimentalFeatures: true

      }

    })

    // 推荐const mainWindow = new BrowserWindow({})

    9) 不要使用enableBlinkFeatures

    Electron的默认值就是建议值。

    Blink是Chromium里的渲染引擎名称。 就像experimentalFeatures一样,enableBlinkFeatures属性将使开发者启用被默认禁用的特性。

    为什么?

    通常来说,某个特性默认不被开启肯定有其合理的原因。 针对特定特性的合理使用场景是存在的。 作为开发者,你应该非常明白你为何要开启它,有什么后果,以及对你应用安全性的影响。 在任何情况下都不应该推测性的开启特性。

    怎么做?

    // 不推荐const mainWindow = new BrowserWindow({

      webPreferences: {

        enableBlinkFeatures: 'ExecCommandInJavaScript'

      }

    })

    // 推荐const mainWindow = new BrowserWindow()EN

    10) 不要使用allowpopups

    Electron的默认值就是建议值。

    如果您正在使用 <webview> ,您可能需要页面和脚本加载进您的 <webview> 标签以打开新窗口。 开启allowpopups属性将使得BrowserWindows可以通过window.open()方法创建。 否则, <webview> 标签内不允许创建新窗口。

    为什么?

    如果你不需要弹窗,最好使用默认值以关闭新BrowserWindows的创建。 以下是最低的权限要求原则:若非必要,不要再网站中创建新窗口。

    怎么做?

    <!-- Bad --><webview allowpopups src="page.html"></webview>

    <!-- Good --><webview src="page.html"></webview>EN

    11) 创建WebView前确认其选项

    通过渲染进程创建的WebView是不开启Node.js集成的,且也不能由自身开启。 但是,WebView可以通过其webPreferences属性创建一个独立的渲染进程。

    It is a good idea to control the creation of new <webview> tags from the main process and to verify that their webPreferences do not disable security features.

    为什么?

    Since <webview> live in the DOM, they can be created by a script running on your website even if Node.js integration is otherwise disabled.

    Electron 可以让开发者关闭各种控制渲染进程的安全特性。 通常情况下,开发者并不需要关闭他们中的任何一种 - 因此你不应该允许创建不同配置的<webview>标签

    怎么做?

    在 <webview>标签生效前,Electron将产生一个will-attach-webview事件到webContents中。 利用这个事件来阻止可能含有不安全选项的 webViews 创建。

    app.on('web-contents-created', (event, contents) => {

      contents.on('will-attach-webview', (event, webPreferences, params) => {

        // Strip away preload scripts if unused or verify their location is legitimate

        delete webPreferences.preload

        delete webPreferences.preloadURL

     

        // Disable Node.js integration

        webPreferences.nodeIntegration = false

     

        // Verify URL being loaded

        if (!params.src.startsWith('https://example.com/')) {

          event.preventDefault()

        }

      })

    })

    Again, this list merely minimizes the risk, it does not remove it. If your goal is to display a website, a browser will be a more secure option.

    12) 禁用或限制导航

    如果您的应用程序不需要导航或仅需要导航到已知页面,则最好将导航完全限制在该已知范围内,而不允许任何其他类型的导航。

     

    为什么?

    导航是一种常见的攻击手段。 如果攻击者可以说服您的应用程序离开当前页面,则可能会迫使您的应用程序打开Internet上的网站。 即使您将WebContents配置为更安全(例如禁用了nodeIntegration或启用了contextIsolation),让您的应用程序打开随机网站也会使开发应用程序的工作变得更加容易。

    常见的攻击模式是,攻击者诱使您的应用程序用户与该应用程序进行交互,以使其导航至攻击者的页面之一。 通常通过链接,插件或其他用户生成的内容来完成此操作。

    怎么做?

    如果您的应用程序不需要导航,则可以在will-navigate处理程序中调用event.preventDefault()。 如果您知道您的应用可能会导航到哪些页面,请检查事件处理程序中的URL,仅在导航与您期望的URL匹配时才进行导航。

    我们建议您对URL使用Node的解析器。 有时可能会愚弄简单的字符串比较-startsWith('https://example.com')测试会让https://example.com.attacker.com通过。

    const URL = require('url').URL

     

    app.on('web-contents-created', (event, contents) => {

      contents.on('will-navigate', (event, navigationUrl) => {

        const parsedUrl = new URL(navigationUrl)

     

        if (parsedUrl.origin !== 'https://example.com') {

          event.preventDefault()

        }

      })

    })

    13) 禁用或限制新窗口的创建

    如果您拥有一组已知的窗口,则最好限制在应用程序中创建其他窗口。

    为什么?

    就像导航一样,创建新的webContents是常见的攻击手段。 攻击者试图说服您的应用以比以往更多的特权来创建新的窗口,框架或其他渲染器进程。 或打开了以前无法打开的页面。

    如果除了您需要创建的窗口之外,您还不需要创建其他窗口,则禁用创建可以免费为您提供额外的安全性。 对于打开一个``浏览器窗口''并且无需在运行时打开任意数量的其他窗口的应用程序来说通常是这种情况。

    怎么做?

    webContents将在创建新窗口之前发出new-window事件。 除其他参数外,还将传递该事件,请求打开窗口的URL和用于创建该事件的选项。 我们建议您使用事件检查窗口的创建,将其限制为仅您需要的。

     

    const { shell } = require('electron')

     

    app.on('web-contents-created', (event, contents) => {

      contents.on('new-window', async (event, navigationUrl) => {

        // In this example, we'll ask the operating system

        // to open this event's url in the default browser.

        event.preventDefault()

     

        await shell.openExternal(navigationUrl)

      })

    })

    14) 不要使用带有不受信任内容的“ openExternal”

    Shell的openExternal允许使用桌面的本机实用程序打开给定的协议URI。 例如,在macOS上,此功能类似于openterminal命令实用程序,并将基于URI和文件类型关联打开特定的应用程序。

    为什么?

    可能会滥用openExternal来损害用户的主机。 当openExternal与不受信任的内容一起使用时,可以利用它来执行任意命令。

    怎么做?

    //  Badconst { shell } = require('electron')

    shell.openExternal(USER_CONTROLLED_DATA_HERE)

    //  Goodconst { shell } = require('electron')

    shell.openExternal('https://example.com/index.html')

    15) 禁用“远程”模块

    远程模块为渲染器进程提供了一种访问通常仅在主进程中可用的API的方式。 使用它,渲染器可以调用主流程对象的方法,而无需显式发送进程间消息。 如果您的桌面应用程序不运行不受信任的内容,这可能是使渲染器进程访问并使用仅对主进程可用的模块(例如与GUI相关的模块(对话框,菜单等))的有用方法。

    但是,如果您的应用程序可以运行不受信任的内容,并且即使您相应地对沙盒渲染器进程进行了处理,则远程模块也可以使恶意代码更容易逃脱沙盒并通过主进程的更高特权来访问系统资源。 因此,在这种情况下应禁用它。

    为什么?

    远程使用内部IPC通道与主进程进行通信。 ``原型污染''攻击可以授予恶意代码访问内部IPC通道的权限,然后可以通过模仿远程IPC消息并访问以更高特权运行的主要流程模块来逃脱沙箱。

    此外,预加载脚本可能会将模块意外泄漏到沙盒渲染器。 远程泄漏可将恶意代码与大量主要流程模块结合在一起,以执行攻击。

    禁用远程模块会消除这些攻击媒介。 启用上下文隔离还可以阻止“原型污染”攻击的成功。

    怎么做?

    // Bad if the renderer can run untrusted contentconst mainWindow = new BrowserWindow({})

    // Goodconst mainWindow = new BrowserWindow({

      webPreferences: {

        enableRemoteModule: false

      }

    })

    <!-- Bad if the renderer can run untrusted content  --><webview src="page.html"></webview>

    <!-- Good --><webview enableremotemodule="false" src="page.html"></webview>

    16) 过滤“远程”模块

    如果无法禁用远程模块,则应过滤可通过应用程序不需要的远程访问的全局,节点和电子模块(所谓的内置模块)。 可以通过完全阻止某些模块并将其替换为仅暴露应用程序所需功能的代理来完成。

    为什么?

    由于主进程具有系统访问特权,因此,在受损的渲染器进程中运行的恶意代码手中,由主进程模块提供的功能可能很危险。 通过将可访问模块的数量限制为应用程序所需的最少数量并过滤掉其他模块,可以减少恶意代码可用于攻击系统的工具集。

    请注意,最安全的选择是完全禁用远程模块。 如果选择过滤访问而不是完全禁用模块,则必须非常小心以确保通过允许通过过滤器的模块无法进行特权升级。

    怎么做?

    const readOnlyFsProxy = require(/* ... */) // exposes only file read functionality

    const allowedModules = new Set(['crypto'])const proxiedModules = new Map(['fs', readOnlyFsProxy])const allowedElectronModules = new Set(['shell'])const allowedGlobals = new Set()

     

    app.on('remote-require', (event, webContents, moduleName) => {

      if (proxiedModules.has(moduleName)) {

        event.returnValue = proxiedModules.get(moduleName)

      }

      if (!allowedModules.has(moduleName)) {

        event.preventDefault()

      }

    })

     

    app.on('remote-get-builtin', (event, webContents, moduleName) => {

      if (!allowedElectronModules.has(moduleName)) {

        event.preventDefault()

      }

    })

     

    app.on('remote-get-global', (event, webContents, globalName) => {

      if (!allowedGlobals.has(globalName)) {

        event.preventDefault()

      }

    })

     

    app.on('remote-get-current-window', (event, webContents) => {

      event.preventDefault()

    })

     

    app.on('remote-get-current-web-contents', (event, webContents) => {

      event.preventDefault()

    })

    17) 使用当前版本的 Electron

    您应该争取始终使用最新版本的Electron。 每当发布新的主要版本时,您都应尝试尽快更新您的应用。

    为什么?

    与使用较新版本的那些组件的应用程序相比,使用较早版本的Electron,Chromium和Node.js构建的应用程序更容易成为目标。 一般而言,较旧版本的Chromium和Node.js的安全性问题和漏洞利用更为广泛。

    Chromium和Node.js都是数以千计的优秀开发人员构建的令人印象深刻的工程壮举。 鉴于它们的受欢迎程度,它们的安全性由同样熟练的安全研究人员进行了仔细的测试和分析。 这些研究人员中有许多负责任地披露了漏洞,这通常意味着研究人员将在发布问题之前给Chromium和Node.js一些时间来修复问题。 如果您的应用程序运行的是最新版本的Electron(因此是Chromium和Node.js),而该版本的潜在安全问题并未广为人知,则您的应用程序将更加安全。

     

    0x03 参考文章

    https://myslide.cn/slides/14368

    https://www.jianshu.com/p/97179e311cea

     

     

    展开全文
  • Sheet1特种设备安全风险点管控措施清单序号分类名称风险名称风险产生条件可能导致后果风险等级管控措施责任部门1锅炉故障锅炉缺水锅炉运行中水位超过最低限定线人员伤亡或者财产损失较大风险(1)加强司炉工
  • Zen Rails安全清单 概要 本文档提供了开发Ruby on Rails应用程序时要实施的安全措施的不一定全面的列表。 它旨在用作快速参考,并最大程度地减少开发人员健忘造成的漏洞。 它并不能替代开发人员有关安全编码原则以及...
  • 导语Kubernetes中的安全性是一个多维问题,必须从各个不同的角度来解决才算完善,这篇文章将从4个方面为读者列出安全清单。正文Kubernetes,经过更快的采用和社区的更多贡献,正...

    导语

    Kubernetes中的安全性是一个多维问题,必须从各个不同的角度来解决才算完善,这篇文章将从4个方面为读者列出安全清单。

    正文

    Kubernetes,经过更快的采用和社区的更多贡献,正日益攀登到新的高度。不过,安全性仍然是Kubernetes的重要方面之一,最初使早期采用者望而却步。与虚拟机相比,许多人怀疑容器和Kubernetes的安全性,随后注销了容器。但是人们逐渐和稳定地开始相信容器和Kubernetes现在和物理机和虚拟机一样安全。

    Kubernetes中的安全性是一种实践,而不仅仅是一项功能。安全是一个多维问题,必须从许多不同的角度来解决。Kubernetes中的安全性无法在一篇文章中涵盖,但是以下清单涵盖了应该在整个堆栈中进行审查的主要安全性领域。

    安全必须是任何组织的DevOps流程(通常称为DevSecOps)的一等公民。使用DevSecOps,从一开始就将安全问题作为DevOps管道的一部分嵌入其中。DevSecOps实践可实现大多数安全问题的自动化,并在开发过程中提供一系列安全检查。

    由空军首席软件官Nicolas M. Chaillan牵头的DevSecOps开放计划是在组织中采用DevSecOps及其重要性的一个很好的例子。详细信息已发布在

    空军网站上,以便其他组织深入DevSecOps使用。这些DevSecOps做法可以为组织提供在其Kubernetes基础架构中嵌入安全保护措施的途径。

    Kubernetes的安全性可以定义为以下4个方面:基础设施、Kubernetes、容器和应用程序,见下图所示。

    图1. Kubernetes安全的4个方面

    一.保护基础设施

    基础结构级的安全性通常是最基本的任务,但也是最大的任务。但是,在开发过程中经常会忽略它。在构建应用程序时,请务必牢记基础架构的安全性,因为它会影响应用程序的架构方式。

    基础结构安全本身具有许多方面:

    1.联网

    Kubernetes部署主要是微服务,所有微服务都在彼此对话或与外部应用程序和服务通信。重要的是,仅将网络流量限制为必需的流量,同时要了解微服务可能是短暂的,并且可以在集群中的节点之间移动。您需要考虑网络设计的各个方面,以开发安全的网络。

    (1)控制流量的隔离:Kubernetes控制平面流量必须与数据平面流量隔离。这不仅出于安全原因,而且还避免数据流量影响Kubernetes控制平面流量。如果没有隔离,来自数据平面的流量可能会使来自控制平面的流量蒙上阴影,并导致临时服务中断。

    (2)隔离存储流量:类似地,需要将存储流量与常规数据隔离开来并控制流量,以使基础结构的存储服务不会消耗或关闭应用程序网络,反之亦然。

    (3)网络细分:Kubernetes对用户隐藏了基础架构。开发人员在设计网络时应牢记这一事实以及多租户。底层网络基础结构必须同时支持基于第2层

    VLAN的分段和基于第3层VXLAN的分段,以隔离各种租户或应用程序之间的流量。两种分割技术都可以根据需要使用。

    (4)服务质量:在共享网络基础结构中,嘈杂的“邻居”是一个大问题。重要的是,基础网络基础结构可以保证为每个Pod或租户指定的服务水平,同时

    确保一个Pod的流量不会影响其他Pod。诸如SR-IOV之类的网络虚拟化技术有助于在共享基础架构上提供虚拟化隔离。

    (5)网络策略,防火墙和ACL:我们将在后面更详细地讨论应用程序级别的网络访问控制,但是网络应在硬件级别上具有较低级别的访问控制,并应更好地控制共享环境中的流量。

    2.存储

    对于任何组织来说,存储都是安全性的关键部分。黑客通常会寻找保存在应用程序存储中的机密数据,例如信用卡信息或个人身份信息(PII)。使用Kubernetes的开发人员应考虑以下形式的存储级安全性实现。

    (1)自加密驱动器:存储安全性的一种基本形式是自加密驱动器。使用这些驱动器,加密就转移到磁盘本身上,在那里数据在写入磁盘时得到加密。这样可以确保如果有人可以物理访问磁盘驱动器,则他们将无法访问数据。

    (2)卷加密:在共享基础架构中,Kubernetes CSI管理卷的生命周期。这样可以将用户与基础存储基础架构隔离开。卷加密可确保保护各个卷,以防止来自不需要的元素的访问。

    (3)服务质量:在共享存储基础结构中,大量I / O应用程序可能会影响其他应用程序的性能。重要的是,基础存储基础架构应具有确保为每个Pod或

    租户提供保证的服务水平的能力。同样,SR-IOV有助于在PCI级别提供存储隔离,每个租户使用单独的队列。

    3.主机和操作系统(OS)

    基础架构的下一个层次是物理或虚拟主机本身。运营商将希望通过以下方式保护基础:

    (1)加强操作系统:站点可靠性工程师(SRE)应遵循一般安全准则保护主机操作系统,并加强操作系统以避免任何进一步的更改。SRE还应该应用防

    火墙,端口阻止和其他标准最佳实践安全措施。常规安全更新和修补程序在可用后必须立即应用。黑客和入侵者经常利用已知漏洞。

    (2)启用内核安全性:SELinux和AppArmor之类的内核安全性模块定义了系统上的应用程序,进程和文件的访问控制。

    (3)审核日志记录:使用Kubernetes的组织应该实施审核日志记录,不仅可以帮助监视系统,还可以帮助调试和查找安全漏洞的踪迹。

    (4)轮换凭证:用户凭证必须经常轮换,并且必须遵循严格的安全准则,以免被破解或被盗。

    (5)锁定节点:在Kubernetes集群中配置并设置节点后,应删除操作系统。除了补丁和升级外,无需安装或配置任何新内容。所有节点都必须锁定,并且只能由超级管理员访问。

    (6)CIS一致性:CIS(Internet安全中心)提供了一致性测试,以确保已实施所有最佳实践。查看您的主机设置,并通过一致性测试以确保符合要。

    4.主机级访问管理

    进入Kubernetes集群的最薄弱点是节点本身。由于Kubernetes极大地将用户与基础节点隔离开来,因此控制对节点的访问非常重要。

    (1)严格访问:组织应谨慎将对节点的root / admin访问限制为一组非常有限的受信任用户。

    (2)建立锁定:即使对于非root用户,理想情况下也应限制对开发人员的直接登录并将其限制为通过Kubernetes API服务器进行访问。为了避免对运行在节点上的Kubernetes服务造成任何威胁,应锁定所有节点。

    (3)隔离Kubernetes节点:Kubernetes节点必须位于隔离的网络上,并且绝对不能直接暴露给公共网络。如果可能的话,它甚至不应直接暴露于公司网络。仅当Kubernetes控制和数据流量隔离时才有可能。否则,两个业务流都流经同一管道,并且对数据平面的开放访问意味着对控制平面的开放访问。理想情况下,应该将节点配置为仅接受来自指定端口上主节点的连接(通过网络访问控制列表)。

    (4)主节点:主节点访问必须由网络访问控制列表控制,仅限于管理集群所需的IP地址集。

    二. 保护Kubernetes

    在锁定基础架构的情况下,确保安全的下一层是Kubernetes安装本身。在典型的开源Kubernetes安装中,由于默认情况下它们并未全部打开,因此其中许多需要手动配置。

    1.安全etcd

    etcd是高度可用的键值存储,用作所有集群数据的Kubernetes的后备存储。它包含了Kubernetes的所有状态,秘密和信息,这意味着保护etcd非

    常重要。

    (1)如前所述,etcd中的节点应该以最小的访问权限被锁定。

    (2)理想情况下,应加密包含etcd数据的驱动器。

    (3)对etcd的访问必须仅限于母版。

    (4)理想情况下,etcd通信应通过TLS。

    2.确保对Kubernetes集群的访问

    Kubernetes允许企业使用标准的身份和访问控制解决方案,但是它们需要与环境集成,并且默认情况下不提供。访问控制可以细分为以下组件。

    (1)身份验证:用户必须先经过身份验证,然后才能访问Kubernetes API。Kubernetes提供了各种身份验证模块-包括客户端证书,密码,普通令牌,引导令牌和JWT令牌(用于服务帐户)。但是,实际的用户管理和身份验证不是Kubernetes的一部分。对于生产环境,组织将需要支持这些功能的外部用户管理和身份验证插件或Kubernetes平台。与LDAP,Active Directory或其他身份提供程序解决方案集成非常重要。

    图2. Kubernetes中基于角色的访问控制

    (2)授权:验证用户身份(即允许其连接到Kubernetes集群)后,下一步是授权,以确定对所请求资源的访问权限。Kubernetes支持多种授权模块,例如基于属性的访问控制(ABAC),基于角色的访问控制(RBAC)和Webhooks。RBAC是最受欢迎的授权插件之一,因为它允许在多租户环境中对单个Kubernetes资源进行精细控制。

    (3)准入控制:准入控制挂钩允许组织在用户经过身份验证并被授权访问所请求的资源之后,拦截和控制Kubernetes请求。准入控制的最佳示例是资源配额,该配额使组织可以控制资源消耗。还必须通过TLS保护对Kubernetes API服务器的访问。

    3.安全政策

    Kubernetes提供了一些可由用户定义的可配置策略。这些应符合企业惯例,但默认情况下未启用。

    一个吊舱安全策略是一个准入控制插件,确保遵循一定的安全准则时舱体只承认。可以定义的策略包括限制特权Pod的创建,阻止容器作为root用户运行或限制对某些名称空间,网络或卷的使用。网络策略由容器网络接口(CNI)插件实现,该插件控制如何允许Pod组与彼此以及其他网络端点进行通信。设置网络策略非常重要,因为默认情况下,pod是非隔离的(它们接受来自任何来源的流量)。

    Kubernetes为计算资源(CPU和内存)提供服务质量(QoS)保证,以避免邻居过多或资源匮乏的问题,但它不为I / O(存储和网络)提供QoS。Diamanti等超融合平台增加了对I / O QoS的支持。

    4.工作负载隔离和多租户

    在多租户环境中,每个租户或租户组必须具有单独的名称空间,以使工作负载和数据彼此隔离。CNI,CSI和身份验证插件需要支持这些分隔和边界,以便它们在整个堆栈中保持一致。

    三. 保护容器

    容器在开发过程中和运行时都需要加以保护。有很多很棒的资源可用于保护容器,包括本文,但这里有一些关键要素:

    1.容器映像安全

    所有正在运行的容器均基于映像文件,该映像文件可以从诸如Docker Hub之类的开放库中下载,也可以从一个团队传递给另一个团队。重要的是要知道图像的来源和内部内容。所有这些举措都应该成为组织DevOps流程的一部分,以实现自动化并确保安全。

    (1)图像漏洞扫描:必须使用Aqua,Twistlock,Sysdig和Clair等工具对正在构建的容器映像进行扫描以查找已知漏洞。这些工具解析映像中的程序包和依赖项,以查找已知的漏洞。

    (2)图像签名:组织还应执行严格的准入控制政策,仅允许通过公司公证人签名的图像。TUF和Notary是用于签名容器映像和维护容器内容信任系统的有用工具。

    (3)限制特权:此外,组织应避免在容器映像中使用root用户,并防止特权升级。容器内部的用户必须具有必需的最低级别的操作系统特权,才能实现容器的目标。

    2.容器运行时

    容器运行时是安装在操作系统中的程序。今天,大多数环境都使用Docker,而CIS基准可用。Seccomp可用于减少攻击面,而更新的运行时(如CRI-O)具有附加的内置安全功能。

    3.运行容器

    Twistlock,Aqua和Sysdig等许多工具还通过监视网络和系统调用,为运行时漏洞提供连续监视和威胁预防。这些工具还具有拦截和阻止这些不需要的呼叫或通信并执行安全策略的能力。

    四. 保护应用程序

    最后,在保护了基础架构,Kubernetes和容器之后,保护应用程序本身仍然很重要。

    1.应用程序访问

    (1)用于Kubernetes入口的TLS:将您的应用程序暴露在集群外部的最常见做法是使用入口控制器,例如Envoy或NGINX。所有对入口控制器的外部访问都必须通过TLS,并且入口控制器与应用程序容器之间的通信也应使用TLS,尽管在某些情况下不需要使用TLS,具体取决于网络设计和公司安全策略。

    (2)加密传输中的所有内容:除少数情况外,默认行为应是加密传输中的所有内容。即使在公司防火墙后面,也建议对容器之间的网络流量进行加密。Istio和Linkerd等许多服务网格提供了mTLS选项,以自动加密Kubernetes集群中的流量。

    2.通讯

    (1)网络:Istio,Linkerd和Consul等服务网格提供了许多第7层网络功能,从而可以限制和控制多个租户之间的流量。

    (2)端口:仅在应用程序/容器上公开对于与该应用程序通信绝对必要的端口,这一点很重要。

    3.应用强化

    CI / CD管道中应内置许多DevOp实践,以确保应用程序安全并遵循最佳实践。一些例子是:

    (1)定期分析源代码,以确保其遵循最佳实践,以避免漏洞和威胁。有许多可用的工具,例如Veracode和Synopsys。

    (2)大多数开发人员都依赖第三方应用程序和库来构建其应用程序和微服务。定期扫描代码依赖项以查找新漏洞,以确保它们不会威胁到应用程序的安全。

    (3)持续测试您的应用程序是否受到常见攻击实践的影响,例如SQL注入,DDoS攻击等。这里有各种动态分析工具可为您提供帮助。

    综上所述

    安全始终是组织的头等大事。但是从传统上讲,安全性是组织中一个独立的团队,该组织在独立于开发过程的孤岛中工作。开发人员通常专注于应用程序,并且安全团队会在开发周期结束时介入其中。但是,由于开发团队忽略了关键的安全策略,因此安全团队拖延了流程,这可能会使部署脱轨。安全和开发团队之间的这种不健康的互动不仅导致脆弱的软件开发,而且还导致许多最新的错误以及生产中意外的延迟。

    在容器和Kubernetes的新时代,拥有强大的安全实践自动化非常重要。从一开始就应该将安全性纳入开发周期。随着安全性在DevOps流程中根深蒂固,DevSecOps现在成为焦点。挑战在于,必须在多个域中手动配置以上清单中概述的许多项目。缺少其中一项可能会使整个应用程序和公司面临风险。

    应用程序安全性仍然是开发人员的责任。但是与基础设施,平台和Kubernetes相关的其他安全功能可以通过Diamanti平台等现代超融合方法解决Diamanti平台是Kubernetes的全栈硬件和软件平台,它内置了本文中提到的许多安全功能,从而减轻了为组织自己实施这些功能的痛苦。这可以帮助您轻松设置DevSecOps管道,以便您可以专注于应用程序开发。

    展开全文
  • 面对不断发展变化的网络安全威胁,任何机构也不可能说自己随时可以100%符合所有标准。随着企业快速迁移到云端,数据存储规模指数级增长,现在更难以充满自信地说自己可以在合规清单上把所有的候选框都勾上了。衡量和...

    面对不断发展变化的网络安全威胁,任何机构也不可能说自己随时可以100%符合所有标准。随着企业快速迁移到云端,数据存储规模指数级增长,现在更难以充满自信地说自己可以在合规清单上把所有的候选框都勾上了。衡量和证明自身系统合规性的责任落在企业自身,而很多企业在云时代难以做到这一点。

    另外,大多数企业认为,通过年度审计或评估就意味着自己“没事了”,不需要再操心维持自身合规性——只要审计结果是绿灯放行。然而,据威瑞森调查,80%通过了PCI年度评估的企业,此后不久就偏离了合规要求。近期数据泄露的规模,让很多企业的安全措施无法延缓攻击者脚步的事实变得十分明显,持续合规和随时在线的风险管理是保护脆弱系统和网络面授未来攻击侵害的必需品。简单地设置安全控制和标准还不够。希望对不断进化的安全违反态势有所准备的公司,应该尽力维持合规。

    今天的合规框架,围绕“持续合规”过程提供更多的建议以管理风险。他们清楚,随时保证合规是不可能的,最大的努力就是采用持续的监视。持续监视是持续合规的唯一途径,简单说,人工管理这一风险既没效果,也没效率。采纳具备自动化安全和合规的现代云基础设施,对保护云技术带来的大量攻击入口点是必须的。尽管手工梳理云又慢又费劲,很多企业还是想增加他们的审计频度以确保和证明自己在尽最大努力维持安全。

    当代自动化云安全框架中持续合规的主要好处包括:

    1. 实时合规和更快的修复

    近实时态势感知可通过持续监视基础设施和在引入时识别关键风险达成。一开始就合规,意味着在整个开发生命周期里贯彻安全监视,以及避免在周期末端发生昂贵的变化。

    1. 易用和更简单更快的报告

    一键合规报告记录下合规策略被遵循的程度,让团队得以创建自动修复规则或遵循建议修复步骤以解决问题。用户归因主打识别出风险被引入到环境中的时间、方式、位置和人员。不再需要花费数周时间手动审查各个系统以产生合规报告,人工方式在你完成的时候可能就已经过时了。而一键合规报告,只需一次点击,就能生成报告,然后导出成审计员需要的形式,节省时间和金钱。团队里的任何人都不需要专门知识就能产出报告。事实上,为审计员提供自服务合规报告的只读访问,能创建全新的抽象层以保护运营团队不受中断。

    1. 对云生态系统的完整可见性

    这些平台监视器测试并报告所有云服务,提供对所有可测试合规检查的可操作试图。利益相关者有简易的方式可以查看、监视和报告自身整个云生态系统的安全和合规性。

    1. 更快的修复

    因为监视、评估和修复云基础设施风险是单一平台完全实时托管的,风险能被快速检测和修复。研发团队不用再在审计时间临近时被拉偏离正常工作轨道,不用再不得不停下项目区处理年度合规欠账。

    公司企业需要转变应急合规思维到持续合规上来。今天的动态计算环境中,网络边界已不存在,自动化和持续合规是确保基础设施随时安全的必须品。今天的云安全框架,装备了对企业整个云基础设施完整的实时的合规评估。报告可被实时产生,审计得以更经常地进行。采纳了现代安全和合规平台的企业,能从经济有效性和及时性中获益,因而他们可以集中精力到其他高价值的项目上。

    本文转自d1net(转载)

    展开全文
  • SAP PM工作清单管理

    2021-01-11 15:20:17
    工厂维护中的工作清单管理用于控制和监控安全措施。为组织中的员工提供安全的工作条件,遵循环保法规。 在一个组织中,工作场所安全取决于多个因素 - 任务类别 系统的技术规格 维修部门内组织 员工技能和教育 ...
  • 审核清单如下: 体系标准款项 标题 审核问题 审核方式 审核发现 审核结果 4 组织环境 – – – – 4.1 理解组织及其环境 管理者代表是否了解公司的业务以及行业环境 访谈 符合 4.2 理解相关方的需求和...
  • 一开始就让人有机会发言能够提高他们主动参与和表达意见的积极性,能够增强他们的责任感。 清单编制6大要点:1、设定清晰的检查点;2、选择合适的清单类型;3、简明扼要,不宜太长;4、清单用语精炼、准确;5、清单...
  • 在当下材料性能测试领域还存在这大量“无能之错”,尽管在人、机、料、法、环方面做了大量努力,但还是存在着缺少...这个重要环节的补充,需要发挥全领域的力量,建立材料性能检测试验操作清单和数据库类型的操作手册。
  • 建筑企业安全生产责任制(DOC格式)具有很重要的作用,一份合理的制度能够提供团队的凝聚力与向上力,需...该文档为建筑企业安全生产责任制(DOC格式),是一份很不错的参考资料,具有较高参考价值,感兴趣的可以...
  • 不会被盗了吧?...  资金账户安全越来越被消费者所关注,常用手机支付的消费者王小姐表示,自己之所以那么紧张... 业内专家提醒,可以选择保障资金账户安全的责任保险,但是需要注意资金安全责任险存在一定的免赔条款,
  • 生产要素的安全关系着国计民生的方方面面,从这个高度上看,也就不难理解数据安全法作为数据法中的基本法意义及其时代作用了。 我们已经迈入“大数据时代”,数据安全成为这个时代特有的安全重点。2020年4月9日,...
  • 根据集团公司 项目关键岗位人员安全生产责任清单 试行工程施工前项目经理应 根据集团公司 项目关键岗位人员安全生产责任清单 试行工程施工前项目经理应 根据公司下达的安全生产 目标结合工程情况组织制定本项目的 A ...
  • 在每周约50种新漏洞被披露、一年约2500种新漏洞被发现的前提下,网管员面临着巨大的工作压力:应该关注哪些漏洞,应该给哪些...美国系统网络安全协会(SANS)日前发布了最值得关注的2004年度核心软件的漏洞清单(To...
  • 一、数据库管理员的工作内容 1、规划与建设:  1、数据库服务器环境的架构评估与规划。    服务器环境的架构规划与数据库以后的运作相关,当服务器环境的架构设计不良,  将会增加以后数据库性能的限制与维护...
  • ISO27001信息安全体系内容

    千次阅读 2018-07-27 14:36:36
    一、IS027001:2013版和2005版区别ISO27001:2005版ISO27001:2013版备注A5安全方针A5安全方针A6信息安全组织A6信息安全组织A8人力资源安全A7人力资源安全A7资产管理A8资产管理A11访问控制A9访问控制A10密码学新增A9...
  • 随着《网络安全法》的实施, 全国各地相关主管部门在对各类违反《网络安全法》行为进行严厉查处,《网络安全法》实施的一年多来,各地各部门整体对网络安全的认识更深刻,对网络安全的重视程度明显提高。现在很多...
  • 清单革命》

    千次阅读 2017-11-23 22:42:56
    生活在无边的信息、知识、技术的海洋中,你常常... 读书目标:希望可以总结出自己的一张清单,来指导自己。 读书时间:两周 2017/11/23 周四 22:02一、为什么需要清单 “无知之错”与“无能之错”  人类犯错有两大
  • 前端性能优化清单

    千次阅读 2018-01-26 18:36:04
    前端性能优化清单 性能很重要——我们都知道。但是,我们是否真的总是知道我们的性能瓶颈究竟是什么?是昂贵的JavaScript,慢Web字体传递,沉重的图像,或缓慢渲染?是否值得借助交叉口观察员,客户提
  • Web开发者必备:Web应用检查清单 想做一个高质量的Web应用,前前后后要做的事情...清单内容可能不全面,欢迎大家在评论中补充。 开发 记录UI错误日志 JavaScript 允许捕获异常。这些异常需要通过Ajax请求提交到日志...
  • 对象就承担了这个责任:容器中的每一个bean都会有一个对应的BeanDefinition实例,该实例负责保存bean对象的所有必要信息,包括bean对象的class类型、是否是抽象类、构造方法和参数、其它属性等等。当客户端向容器...
  • 清单革命》读书笔记

    千次阅读 2020-05-09 16:23:53
    文章目录简介引言 “无知之错”与“无能之错”可以原谅的与不被原谅的为什么会有一件事谁都没做人类错误的两大类型不能被原谅的“无能之错”我们需要一场真正的变革第一部分 清单革命是一场观念变革第1章 人人都会...
  • 对象就承担了这个责任:容器中的每一个 bean 都会有一个对应的 BeanDefinition 实例,该实例负责保存bean对象的所有必要信息,包括 bean 对象的 class 类型、是否是抽象类、构造方法和参数、其它属性等等。...
  • 代码坏味道清单

    千次阅读 2016-07-29 21:35:56
    针对某一外界变化的所有相应修改,都只应该发生在单一class中,而这个新class内的所有内容都应该反应该外界变化。为此,你应该找出因着某特定原因而造成的所有变化,然后运用Extract Class将它们提炼到另一个class中...
  • 云计算渗透测试清单和重要注意事项  什么是云计算渗透测试?  云计算渗透测试是通过模拟恶意代码的攻击,对云系统进行主动检查和测试的一种方法。    云计算是云提供商和从提供商那里获得服务的客户共同的...
  • 【汇总】Android知识清单

    千次阅读 2018-03-01 22:48:45
    本文对网络上的相应内容做上相应的总结与整合,以供自己整理知识使用,各部分来自于哪个网址,未能及时给出,如有侵犯,请与我说明,以及时更正,带来的不便还望谅解。 此部分(到分割线为止)来自出自...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,143
精华内容 4,457
关键字:

安全责任清单内容