AI时代的开发与安全:跨界思维与实践分享

admin 2024年4月26日08:27:32评论8 views字数 4051阅读13分30秒阅读模式
AI时代的开发与安全:跨界思维与实践分享
奋进的小杨

读完需要

9

分钟

速读仅需 3 分钟

1

AI 时代的开发与安全:跨界思维与实践分享

1.1

引言

亲爱的读者们,好久不见!在这一年的沉寂中,我经历了丰富的学习和实践。这段时间,我有幸深入接触并学习了系统工程化实现的全流程,从创新设计到前后端的开发,再到功能设计和系统架构的构建,每一步都让我对技术的深度和广度有了全新的认识。同时,我也紧跟时代步伐,研究了 5G 技术和大模型安全等前沿领域,感受到了科技发展的迅猛和无限可能。

我想,将这些宝贵的经验和知识整理出来,与大家分享,是一件非常有意义的事情。或许,我的分享能给你带来新的启发,或许,我的经验能帮助你避免一些技术上的坑。总之,我希望通过这个公众号,与大家共同学习,共同进步。

在未来的日子里,我会陆续更新文章,详细介绍我在系统工程化实现全流程中的所学所得,包括但不限于创新设计理念、前后端技术、功能设计思路、系统架构搭建,以及 5G 和大模型安全等方面的内容。我希望我的分享能够为你的学习和工作提供一些帮助和参考。

再次感谢大家的耐心等待和持续关注。让我们携手在技术的道路上不断前行,共同探索和创造更多的可能性!

1.2

从安全看开发

早期,我是一名非常纯粹的安全工作者,主要是利用各种攻防技术去渗透挖掘目标系统的 bug。安全的本质,是保护系统免受未授权访问和潜在威胁的侵害。现存大多数漏洞的源头,是因为开发过程中安全要素的缺失或不足,比如:不安全的编码习惯、缺乏安全意识、忽视最新的安全更新、开源项目的二次开发等。在系统安全、开发成本、用户体验的三维权衡下,安全由于并不直接产生价值,而被无限制的压缩。虽然在国家法制和合规审计的兜底下,安全的占比也在逐年提高,但是依旧存在着大量的安全漏洞,比如:数据泄露、跨站脚本攻击(XSS)、SQL 注入等。

从攻击者的视角来看,面对一个系统的通用攻击流程通常包括以下几个步骤:

1. 侦察和信息收集:攻击者会收集目标系统的尽可能多的信息,包括IP地址、域名、使用的服务、操作系统类型、开放端口、网站技术栈等。这一步骤的目的是为了识别系统的潜在弱点。2.漏洞分析:基于收集的信息,攻击者会分析系统可能存在的安全漏洞。这可能包括过时的软件、配置错误、不安全的默认设置等。3.利用和攻击:攻击者会尝试利用已识别的漏洞来获取对系统的未授权访问。这可能涉及使用特定的工具或编写定制的攻击代码。4. 命令和控制(C&C):一旦攻击者获得对系统的控制,他们可能会建立命令和控制通道,以便远程操控受感染的系统,执行进一步的恶意活动。5. 提权和维持访问:一旦攻击者获得了一定的访问权限,他们会尝试提升权限,以便执行更高级别的操作。同时,攻击者会采取措施确保对系统的持久访问,以便在未来使用。6. 横向移动:在获得对系统的控制后,攻击者可能会在内网中横向移动,探索其他系统或网络资源,以扩大他们的控制范围。7. 数据窃取和破坏:攻击者可能会搜索敏感数据并将其窃取,或者对系统进行破坏,比如删除数据、植入恶意软件、发起DDoS攻击等。8. 清理痕迹和退出:为了掩盖攻击行为,攻击者会清理痕迹,包括删除日志文件、关闭开放的端口等,然后悄无声息地退出系统。

与此相关的通用工具有攻击链(Kill Chain)。补充一句,渗透攻击的本质,是信息收集。懂的人,都理解这句话,所以不用赘述。

下面以一个登录注册页面为例。首先我们要可以考虑收集的要素如下:

1.应用程序类型和版本:    * 服务器软件(如Apache,      Nginx)的版本。    * Web框架(如WordPress, Joomla, Django)的版本。    * 使用的编程语言(如PHP,Python, Ruby)及其版本。2.url信息:    * IP地址    * 端口    * 目录路径    * ssl证书3.交互和功能:    * 登录和注册表单的字段和类型。    * 表单提交方法(GET或POST)。    * 重置密码和找回用户名功能的实现方式。    * 是否存在验证码或双因素认证。4.交互和功能:    * 是否有内容安全策略(CSP)。    * 是否有X-Frame-Options头防止点击劫持。    * 输入验证和输出编码的实施情况。5.错误处理和反馈:    * 登录失败时的错误消息。    * 服务器端错误是否泄露了敏感信息。6.第三方集成:    * 集成的第三方服务(如社交媒体登录、支付网关)。    * 使用的第三方库和框架7.服务器端技术:    * 服务器端API端点。    * 服务器端语言和框架的详细信息。

基于收集到的信息,下一步就是分析其中的漏洞。成本最低的方法,就是到漏洞云等公开或私有的社区中,寻找对应的 CVE 漏洞或者大佬提供的漏洞线索,然后在本地复现环境,研究其中的利用手法。

最后提一句,任何渗透或者私人猎奇的前提,必须是遵纪守法,否者只会断了自己的饭碗。

1.3

从开发看安全

近期,本人参与到大量前后端开发,在此过程中,真心体会到开发的不易。开发不仅仅需要考虑业务逻辑功能的实现,而且还需要考虑项目整体工程化、模块化,前后端解耦等,此外还需要考虑面对高并发、多线程等异常场景下的系统稳定性和可用性。以下是一些具体的例子:

 * 前后端解耦:通过设置nginx作为中间代理,前端和后端可以独立开发和部署,互不影响。 * 模块化开发:通过设置项目目录,用来分别管理头文件、配置文件、不同模块的功能文件等,这种模块化开发的方式使得代码更加清晰,便于管理和维护。 * 多线程和并发控制:通过利用框架自带的多线程及并发控制的解决方案,确保系统数据的准确性和稳定性。

随着信息化的不断趋于成熟,当前开发者在开发过程中越来越注重安全要素。下面也以登录注册为例,编程语言 python,框架 flask 来分享一下开发者的安全思维。

1.使用安全的密码哈希存储用户密码    * 使用强哈希函数如bcrypt来存储用户的密码,而不是使用明文或简单的哈希函数如MD5或SHA1。    * bcrypt会生成一个加盐的哈希,使得即使是相同的密码,每次生成的哈希值都不同,增加了密码的安全性。2.用户名、密码安全    * 限制用户名出现admin此类    * 对用户名和密码进行严格的输入验证,确保它们符合预期的格式,并且没有包含任何恶意代码。    * 限制用户名、密码的长度    * 确保密码的复杂度    * 确保用户密码定期更新    * 限制登录失败次数,锁定账户,防止暴力破解3.防止SQL注入    * 使用Flask的ORM库,如Flask-SQLAlchemy,它会自动对输入进行转义,防止SQL注入攻击。    * 如果需要直接使用SQL查询,使用参数化查询来避免SQL注入。4.使用HTTPS    * 使用HTTPS来加密客户端和服务器之间的通信,保护用户名和密码在传输过程中不被截获。5.实施适当的认证机制:    * 使用安全的认证令牌(如JWT)来管理用户的会话,而不是使用基于cookie的会话管理。    * 确保认证令牌有过期时间,并使用HTTPS来传输令牌6.防止跨站请求伪造(CSRF):    * 使用Flask-WTF或类似的库来生成CSRF令牌,确保每个表单都有一个CSRF令牌,防止CSRF攻击

考虑到系统性能开销,以及后期维护,本人在实际开发过程中,主要通过调用 python 的安全框架、设置装饰器、逻辑验证等方法来实现,出于工作代码的隐私性,这里就不展示代码了。

1.4

从 AI 看开发&安全

chatgpt、通义千问等大模型工具只从面世以来,层出不穷的相关应用给各行各业带来了“惊喜”,一场颠覆传统生产逻辑的革命正在当时。

本人也在实际工作中,不断尝试使用着各式各样的 AI 应用,其中特别是一些适用于开发者的工具,如 Devv、通义灵码、CodeGeex 等。在此,我谈一下自己的理解。

AI 开发项目,确实可以有效提高生产效率。AI 之所以能够“聪明”,是因为其学习了海量的数据,就像几年前围棋界的人机大战一样,学习了大量棋谱的机器人可以战胜人类的棋手。所以,学会利用 AI 开发项目,等于站在巨人的肩膀上,可以在短期内迅速提升开发质量。

但是 AI 开发代码还是存在很多问题。有心者会发现,AI 开发的代码很多时候是不能直接使用的,当你写下注释要求,AI 会基于自己的“理解”写出用户提示词中“它认为重要的”代码,有些会跑偏,有些会陷入自我不断重复,还有些代码考虑的点有限,存在逻辑不全。另外,更有甚者,还可能存在幻觉,给出完全错误的东西。

那么 AI 在我们实际开发工作中又是充当怎样的定位呢?我认为应该从当下和未来两个视角来看待。当下,优质的 AI 工具更像是一个精通百科的老师,用户不管提出什么问题,都可以很快地给到解答,给出案例,此时用户可以根据需要选择对应的结果。未来,AI 相关应用的不断趋于成熟,确实会极大解放程序员的压力,提高效能,但是在复杂的业务交互逻辑、用户体验、核心算法等方面依旧需要人来把关。AI 能够极大解放开发者的压力,最大限度地放大开发者的自身学习能力,从而帮助开发者实现目标。

回过头来看开发和安全,我认为在 AI 的大背景下,传统开发过程中关于单个技术层面的重要性会不断降低,项目全局层面的重要性会不断提高。一个项目的成功开发,团队成员的建设,一定会越来越注重基础知识的积累、良好开发意识的保持和优秀经验的沉淀,某一个知识技术的缺失,可以通过 AI 工具快速补齐,但是如果不了解代码的深层逻辑,没有意识到代码管理的重要性,甚至看不懂代码的意思,那么将是灾难性的。

事实上,此类看法也存在偏驳。作为打工人,可以从两个层面来洞察 AI 定位的走向。第一个层面,个人知识经验具备广度,但是深度不足,靠自己短期内无法单独承担项目任务,这个时候,AI 凭借其强大的知识积累可以快速补齐个人某方面的短板,辅助完成任务;第二个层面,个人在某方面具备深厚造诣,但是知识宽度不够、经验不足,在从事学科交叉项目过程中,AI 可以解放个人的知识压力,让个人可以专注于个人所长,比如改造代码底层逻辑,维护复杂业务场景。

原文始发于微信公众号(小杨时光智汇):AI时代的开发与安全:跨界思维与实践分享

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月26日08:27:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   AI时代的开发与安全:跨界思维与实践分享http://cn-sec.com/archives/2685573.html

发表评论

匿名网友 填写信息