Skip to content

Commit 74d5800

Browse files
authored
Merge pull request #624 from yalechen-cyw/main
update enhanceDeploy
2 parents 598e927 + 803d3a8 commit 74d5800

6 files changed

Lines changed: 322 additions & 14 deletions

File tree

doc/.vuepress/configs/sidebar/en.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,20 @@ export const en: SidebarConfig = {
2323
'/en/guide/代码检查/分析结果查看.md',
2424
'/en/guide/代码检查/添加规则配置.md',
2525
{
26-
text: '典型工具接入指引',
26+
text: '典型工具使用手册',
2727
children: [
2828
'/en/guide/代码检查/工具/eslint.md',
2929
'/en/guide/代码检查/工具/golangcilint.md',
3030
'/eh/guide/代码检查/工具/TCA-Armory-R.md',
3131
'/eh/guide/代码检查/工具/TCA-Armory-C1.md',
3232
],
3333
},
34+
{
35+
text: '典型规则包使用手册',
36+
children: [
37+
'/en/guide/代码检查/规则包/enhanced_safety_java.md',
38+
],
39+
},
3440
]
3541
},
3642
{

doc/.vuepress/configs/sidebar/zh.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,20 @@ export const zh: SidebarConfig = {
2323
'/zh/guide/代码检查/分析结果查看.md',
2424
'/zh/guide/代码检查/添加规则配置.md',
2525
{
26-
text: '典型工具接入指引',
26+
text: '典型工具使用手册',
2727
children: [
2828
'/zh/guide/代码检查/工具/eslint.md',
2929
'/zh/guide/代码检查/工具/golangcilint.md',
3030
'/zh/guide/代码检查/工具/TCA-Armory-R.md',
3131
'/zh/guide/代码检查/工具/TCA-Armory-C1.md',
3232
],
3333
},
34+
{
35+
text: '典型规则包使用手册',
36+
children: [
37+
'/zh/guide/代码检查/规则包/enhanced_safety_java.md',
38+
],
39+
},
3440
]
3541
},
3642
{
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
# 【Java】强化安全规则包-使用手册
2+
针对 Java 语言的强化代码安全规则包,属于 TCA 增强分析模块的能力之一,请参考[增强分析模块部署](https://tencent.github.io/CodeAnalysis/zh/quickStarted/enhanceDeploy.html)文档进行部署。
3+
4+
5+
## CmdInject
6+
### 概述
7+
支持的语言:Java
8+
9+
CmdInject 规则用于检查代码中是否存在[`命令行注入漏洞`](https://owasp.org/www-community/attacks/Command_Injection)
10+
当使用 childprocess 等模块执行命令时,拼接了用户可控的输入,会导致命令执行漏洞。攻击者利用漏洞可以控制目标主机或者容器。
11+
12+
### 示例
13+
```java
14+
void bad(HttpServletRequest req, HttpServletResponse resp){
15+
String cmd = req.getParameter("cmd");
16+
Runtime rt = Runtime.getRuntime();
17+
rt.exec(cmd); // 触发规则
18+
}
19+
```
20+
21+
### 修复建议
22+
需要评估 childprocess 等模块执行命令的使用,应限定或校验命令和参数的内容。
23+
24+
## PathTraversal
25+
26+
### 概述
27+
支持的语言:Java
28+
29+
PathTraversal 规则用于检查代码中是否存在[`路径穿越漏洞`](https://owasp.org/www-community/attacks/Path_Traversal)
30+
操作文件时,应该限定文件的路径范围,如果拼接用户输入到文件路径,可能导致路径穿越漏洞。攻击者利用漏洞可以访问到文件系统上的任意文件,这可能导致信息泄漏等问题。
31+
32+
### 示例
33+
```java
34+
void bad(HttpServletRequest req, HttpServletResponse resp){
35+
String image = req.getParameter("image");
36+
File file = new File("resources/images/", image); // 触发规则
37+
38+
if (!file.exists()) {
39+
return Response.status(Status.NOT_FOUND).build();
40+
}
41+
42+
return Response.ok().entity(new FileInputStream(file)).build();
43+
}
44+
```
45+
46+
### 修复建议
47+
按业务需求,使用白名单限定后缀范围,校验并限定文件路径范围。
48+
49+
## SQLInject
50+
51+
### 概述
52+
支持的语言:Java
53+
54+
SQLInject 规则用于检查代码中是否存在[`SQL注入漏洞`](https://en.wikipedia.org/wiki/SQL_injection)
55+
错误的拼接用户可控的值到 sql 语句,可能导致 sql 注入漏洞。攻击者可以修改 sql 语法来更改查询的目标或结果,泄露数据库敏感信息,也可以使用SQL文件操作攻击底层Web服务器。如果使用该 sql 查询进行授权认证,攻击者还可以用于提权。
56+
57+
### 示例
58+
```java
59+
void bad(HttpServletRequest req, HttpServletResponse resp){
60+
String id = req.getParameter("id");
61+
Connection conn = null;
62+
Statement statement = null;
63+
ResultSet rs = null;
64+
65+
Class.forName("com.mysql.cj.jdbc.Driver");
66+
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sec_sql", "root", "admin888");
67+
String sql = "select * from userinfo where id = " + id;
68+
statement = conn.createStatement();
69+
statement.executeUpdate(sql); // 触发规则
70+
}
71+
```
72+
73+
### 修复建议
74+
SQL 语句默认使用预编译并绑定变量,使用安全的ORM操作。
75+
76+
## SSRF
77+
78+
### 概述
79+
支持的语言:Java
80+
81+
SSRF 规则用于检查代码中是否存在[`服务端请求伪造漏洞 SSRF(Server-side request forgery)`](https://en.wikipedia.org/wiki/Server-side_request_forgery)
82+
攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。
83+
84+
### 示例
85+
```java
86+
import org.springframework.context.annotation.Configuration;
87+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
88+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
89+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
90+
91+
@EnableWebSecurity
92+
@Configuration
93+
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
94+
@Override
95+
protected void configure(HttpSecurity http) throws Exception {
96+
http
97+
.csrf(csrf ->
98+
csrf.disable() // 触发规则
99+
);
100+
}
101+
}
102+
```
103+
104+
### 修复建议
105+
限定访问网络资源地址范围,请求网络资源应加密传输。
106+
107+
## XSS
108+
109+
### 概述
110+
支持的语言:Java
111+
112+
XSS 规则用于检查代码中是否存在[`跨站脚本攻击漏洞 XSS(Cross-site scripting)`](https://en.wikipedia.org/wiki/Cross-site_scripting)
113+
如果 web 页面在动态展示数据时使用了用户的输入内容,没有对输入的内容过滤或者进行转义,黑客可以通过参数传入恶意代码,当用户浏览该页面时恶意代码会被执行。
114+
115+
### 示例
116+
```java
117+
void bad(HttpServletRequest req, HttpServletResponse resp){
118+
String id = request.getParameter("id") != null ? request.getParameter("id") : "0";
119+
Doc doc = getdetailsById(id);
120+
byte b[] = doc.getUploaded();
121+
try {
122+
response.setContentType("APPLICATION/OCTET-STREAM");
123+
String disHeader = "Attachment;Filename=" + doc.getName();
124+
response.setHeader("Content-Disposition", disHeader);
125+
ServletOutputStream out = response.getOutputStream();
126+
out.print(b); // 触发规则
127+
}
128+
}
129+
```
130+
131+
### 修复建议
132+
133+
在输出所有用户可控的数据时, 对数据做转义或者编码。

doc/en/quickStarted/enhanceDeploy.md

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,16 @@ TCA 增强分析模块,需要用户额外部署 License 鉴权微服务,并
2424
### 准备
2525
- 一台 CLS 微服务专属机器,CLS 微服务需要跟该机器绑定
2626

27+
::: warning
2728
**注意:不能随意删除CLS目录**
29+
:::
2830

2931
### 步骤
3032
1. 在 TCA 源码中[`server/cls`](https://github.com/Tencent/CodeAnalysis/tree/main/server/cls) 目录下执行以下命令,获取 `Server ID``Client License`
3133

34+
::: warning
3235
**注意:需要在 CLS 目录下执行命令**
36+
:::
3337

3438
```shell
3539
$ ./cls server
@@ -77,21 +81,32 @@ tommyzhang@tencent.com
7781
| 首次登记的机器码 | xxx |
7882
| 体验申请用途 | xxx |
7983

80-
4. 收到 TCA 团队回复邮件之后,在 CLS 目录下的[`config.yaml`](https://github.com/Tencent/CodeAnalysis/blob/main/server/cls/config.yaml)文件中填写License
84+
4. 收到 TCA 团队回复邮件之后,在 CLS 目录下的 [`config.yaml`](https://github.com/Tencent/CodeAnalysis/blob/main/server/cls/config.yaml) 文件中填写License
8185

8286
::: warning
83-
注意:遵从yaml格式,
84-
比如:
85-
- 键值对中,冒号 `:` 后面跟一个空白字符,示例 `key: value`.
87+
注意:遵从 yaml 格式,比如:
88+
- 键值对中,冒号 `:` 后面跟一个空白字符,示例 `key: value`
8689
:::
8790

88-
5. 执行以下命令启动CLS
91+
5. 执行以下命令启动 CLS
8992

9093
```shell
9194
./cls server -d
9295
```
9396

94-
6. 启动 TCA 分析任务
97+
6. 验证 CLS 进程正常启动
98+
99+
```bash
100+
# 查找是否存在CLS进程
101+
ps aux|grep cls
102+
```
103+
104+
::: warning
105+
注意:如果以上命令没有发现 CLS 的进程,则说明 CLS 没有正常启动。
106+
请尝试更改 [`config.yaml`](https://github.com/Tencent/CodeAnalysis/blob/main/server/cls/config.yaml) 文件中的 port 为其他 port,比如8080,目前默认是80端口,然后重新执行步骤5的命令。
107+
:::
108+
109+
7. 启动 TCA 分析任务
95110
在 TCA 平台的分析方案里面勾选独立工具相关的规则包,比如依赖组件分析规则包,然后启动一次分析任务,执行正常则表明设置生效。
96111

97112
### CLS 运维
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
# 【Java】强化安全规则包-使用手册
2+
针对 Java 语言的强化代码安全规则包,属于 TCA 增强分析模块的能力之一,请参考[增强分析模块部署](https://tencent.github.io/CodeAnalysis/zh/quickStarted/enhanceDeploy.html)文档进行部署。
3+
4+
5+
## CmdInject
6+
### 概述
7+
支持的语言:Java
8+
9+
CmdInject 规则用于检查代码中是否存在[`命令行注入漏洞`](https://owasp.org/www-community/attacks/Command_Injection)
10+
当使用 childprocess 等模块执行命令时,拼接了用户可控的输入,会导致命令执行漏洞。攻击者利用漏洞可以控制目标主机或者容器。
11+
12+
### 示例
13+
```java
14+
void bad(HttpServletRequest req, HttpServletResponse resp){
15+
String cmd = req.getParameter("cmd");
16+
Runtime rt = Runtime.getRuntime();
17+
rt.exec(cmd); // 触发规则
18+
}
19+
```
20+
21+
### 修复建议
22+
需要评估 childprocess 等模块执行命令的使用,应限定或校验命令和参数的内容。
23+
24+
## PathTraversal
25+
26+
### 概述
27+
支持的语言:Java
28+
29+
PathTraversal 规则用于检查代码中是否存在[`路径穿越漏洞`](https://owasp.org/www-community/attacks/Path_Traversal)
30+
操作文件时,应该限定文件的路径范围,如果拼接用户输入到文件路径,可能导致路径穿越漏洞。攻击者利用漏洞可以访问到文件系统上的任意文件,这可能导致信息泄漏等问题。
31+
32+
### 示例
33+
```java
34+
void bad(HttpServletRequest req, HttpServletResponse resp){
35+
String image = req.getParameter("image");
36+
File file = new File("resources/images/", image); // 触发规则
37+
38+
if (!file.exists()) {
39+
return Response.status(Status.NOT_FOUND).build();
40+
}
41+
42+
return Response.ok().entity(new FileInputStream(file)).build();
43+
}
44+
```
45+
46+
### 修复建议
47+
按业务需求,使用白名单限定后缀范围,校验并限定文件路径范围。
48+
49+
## SQLInject
50+
51+
### 概述
52+
支持的语言:Java
53+
54+
SQLInject 规则用于检查代码中是否存在[`SQL注入漏洞`](https://en.wikipedia.org/wiki/SQL_injection)
55+
错误的拼接用户可控的值到 sql 语句,可能导致 sql 注入漏洞。攻击者可以修改 sql 语法来更改查询的目标或结果,泄露数据库敏感信息,也可以使用SQL文件操作攻击底层Web服务器。如果使用该 sql 查询进行授权认证,攻击者还可以用于提权。
56+
57+
### 示例
58+
```java
59+
void bad(HttpServletRequest req, HttpServletResponse resp){
60+
String id = req.getParameter("id");
61+
Connection conn = null;
62+
Statement statement = null;
63+
ResultSet rs = null;
64+
65+
Class.forName("com.mysql.cj.jdbc.Driver");
66+
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sec_sql", "root", "admin888");
67+
String sql = "select * from userinfo where id = " + id;
68+
statement = conn.createStatement();
69+
statement.executeUpdate(sql); // 触发规则
70+
}
71+
```
72+
73+
### 修复建议
74+
SQL 语句默认使用预编译并绑定变量,使用安全的ORM操作。
75+
76+
## SSRF
77+
78+
### 概述
79+
支持的语言:Java
80+
81+
SSRF 规则用于检查代码中是否存在[`服务端请求伪造漏洞 SSRF(Server-side request forgery)`](https://en.wikipedia.org/wiki/Server-side_request_forgery)
82+
攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。
83+
84+
### 示例
85+
```java
86+
import org.springframework.context.annotation.Configuration;
87+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
88+
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
89+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
90+
91+
@EnableWebSecurity
92+
@Configuration
93+
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
94+
@Override
95+
protected void configure(HttpSecurity http) throws Exception {
96+
http
97+
.csrf(csrf ->
98+
csrf.disable() // 触发规则
99+
);
100+
}
101+
}
102+
```
103+
104+
### 修复建议
105+
限定访问网络资源地址范围,请求网络资源应加密传输。
106+
107+
## XSS
108+
109+
### 概述
110+
支持的语言:Java
111+
112+
XSS 规则用于检查代码中是否存在[`跨站脚本攻击漏洞 XSS(Cross-site scripting)`](https://en.wikipedia.org/wiki/Cross-site_scripting)
113+
如果 web 页面在动态展示数据时使用了用户的输入内容,没有对输入的内容过滤或者进行转义,黑客可以通过参数传入恶意代码,当用户浏览该页面时恶意代码会被执行。
114+
115+
### 示例
116+
```java
117+
void bad(HttpServletRequest req, HttpServletResponse resp){
118+
String id = request.getParameter("id") != null ? request.getParameter("id") : "0";
119+
Doc doc = getdetailsById(id);
120+
byte b[] = doc.getUploaded();
121+
try {
122+
response.setContentType("APPLICATION/OCTET-STREAM");
123+
String disHeader = "Attachment;Filename=" + doc.getName();
124+
response.setHeader("Content-Disposition", disHeader);
125+
ServletOutputStream out = response.getOutputStream();
126+
out.print(b); // 触发规则
127+
}
128+
}
129+
```
130+
131+
### 修复建议
132+
133+
在输出所有用户可控的数据时, 对数据做转义或者编码。

0 commit comments

Comments
 (0)