
正文
java代码后门检测工具 web后门检测
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
PHP程序,如何检测是否被植入后门,木马?
清马
1、找挂马的标签,比如有script language="javasc粻紶纲咳蕺纠告穴梗膜ript" src="网马地址"/script或iframe width=420 height=330 frameborder=0
scrolling=auto src=网马地址/iframe,或者是你用360或病杀毒软件拦截了网马网址。SQL数据库被挂马,一般是JS挂马。
2、找到了恶意代码后,接下来就是清马,如果是网页被挂马,可以用手动清,也可以用批量清,网页清马比较简单,这里就不详细讲,现在着重讲一下SQL数据库清马,用这一句语句“update 表名 set 字段名=replace(字段名,'aaa','')”, 解释一下这一句子的意思:把字段名里的内容包含aaa的替换成空,这样子就可以一个表一个表的批量删除网马。
在你的网站程序或数据库没有备份情况下,可以实行以上两步骤进行清马,如果你的网站程序有备份的话,直接覆盖原来的文件即可。
修补漏洞(修补网站漏洞也就是做一下网站安全。)
1、修改网站后台的用户名和密码及后台的默认路径。
2、更改数据库名,如果是ACCESS数据库,那文件的扩展名最好不要用mdb,改成ASP的,文件名也可以多几个特殊符号。
3、接着检查一下网站有没有注入漏洞或跨站漏洞,如果有的话就相当打上防注入或防跨站补丁。
4、检查一下网站的上传文件,常见了有欺骗上传漏洞,就对相应的代码进行过滤。
5、尽可能不要暴露网站的后台地址,以免被社会工程学猜解出管理用户和密码。
6、写入一些防挂马代码,让框架代码等挂马无效。
7、禁用FSO权限也是一种比较绝的方法。
8、修改网站部分文件夹的读写权限。
9、如果你是自己的服务器,那就不仅要对你的网站程序做一下安全了,而且要对你的服务器做一下安全也是很有必要了!
相关问答
Q1: 海云安源代码审计服务有什么优势吗
现在大部分客户对于软件开发的安全考量基本集中在软件开发的后期,在测试阶段引入。常用的软件风险评估、漏洞扫描、渗透测试等都是在软件开发完成后进行。通常这个阶段预留的时间非常少,不仅修复的难度高,修复、测试的成本极高,而且存在大量的漏洞错报和误报的情况。后期的测试手段也无法精准地测试出代码漏洞的具体位置。当通过后期测试发现问题后,人工进行代码审查去查找漏洞所在代码位置时,我们经常会发现过程中存在效率低、准确率低、无法定位具体问题代码行等问题。而这些问题导致了客户后期发现系统漏洞时,无法进行快速、准确地修复,客户只能让系统携带漏洞上线。SCAP产品将从开发早期进行安全介入,能够快速精准地定位问题代码行,对漏洞进行实时管理,完美地解决上述问题,从源代码级别保护系统的代码安全。
Why SCAP?
海云安源代码分析管理平台(以下简称“SCAP”)是由深圳海云安网络安全技术有限公司多年源代码安全实践经验自主研发的源代码安全漏洞检查及分析管理平台。SCAP拥有领先行业的源代码检测引擎,强大的用户环境集成能力和完善的管理流程使得产品拥有强大的实用性。SCAP为开发人员提供简单、方便、精准、快速的源代码漏洞检查,极大地减少开发人员在查找、修复漏洞上花费的时间,提高安全效率。强大精准的代码检测引擎使得SCAP成为市场上现有源代码安全最强有力的工具。
产品功能
海云安SCAP产品能够从源头和开发的初期就及时发现漏洞,让开发人员在使用意识和编码习惯方面做到杜绝安全隐患,极大地提高用户软件的安全性,帮助用户降低潜在经济损失,实现海云安“安全每一行代码”的愿景。
强大的引擎能力
SCAP拥有领先行业的源代码安全分析引擎,引擎100%自主研发,安全可控。该引擎支持C\C++、Java、JS、PHP、SQL等多种语言,覆盖代码缺陷检测、代码质量检测、开源组件检测、木马后门检测、性能缺陷、编码规范等 2000+种缺陷。引擎积累了庞大的安全漏洞检测规则库,以及源代码误报漏报过滤引擎。同时引擎结合了AI人工智能学习算法,快速积累自己的规则库和漏洞库。
强大的引擎能力
支持Java、C、C++、.NET、Andriod-JAVA、Objective-C、Swift、JSP、PHP、ASP、Python、XML、HTML、JavaScript、VBScript、SQL等20+种语言的检测
▲ 产品页面
支持对代码缺陷检测、代码质量检测、开源组件检测、木马后门检测,涵盖2000+种缺陷类型
符合CWE、OWASP Top 10、SANS、PCI DSS、STIG、NIST等等国际安全组织或行业安全标准的安全漏洞分类、分级,其中OWASP TOP10召回率高,漏报率低
支持用户自定义检测规则,来满足客户化的特定的检测需求;同时支持用户对产品的安全漏洞检测规则库进行自定义勾选,满足用户根据自身特点、或者检测目标的安全要求,定义出不同的检测标准
▲ 产品页面
高效的管理能力
为了让产品更好地服务于用户,在产品设计的过程中,我们对用户的软件开发流程、开发习惯、痛点难点等方面进行了深入的调研。海云安SCAP产品支持项目全生命周期综合管理,能够提供对多个项目源代码的不同开发阶段、不同版本的测试结果报表。针对多用户、多职责、多部门的权限管理不同的情况,用户可根据自己的需求进行权限控制,便于对不同部门和不同角色的用户进行统一分配、集中管理。平台的易用性和高效全面的管理能力使得海云安SCAP成为用户的不二之选。
高效的管理能力
支持项目全生命周期综合管理,提供对多个项目源代码的不同开发阶段、不同版本的测试结果报表功能
多用户,多职责,多部门的权限管理。可根据用户需求进行权限控制,方便不同部门和不同角色的用户进行统一分配、集中管理
管理平台支持从本地上传代码包进行扫描检测,一键上传,自动分析
管理平台有详细的报表统计分析功能,能够展示各研发部门源代码安全审计情况、整改前后的对比、全局源代码审计情况等,方便整体把握源代码安全情况
▲ 产品页面
集成扩展能力
能够对接Git,SVN等主流代码仓库。支持 Eclipse插件集成, IntelliJ插件集成, Android Studio插件集成能够实现一键提交代码扫描
能够无缝对接第三方扫描引擎,并对测试结果以及规则等进行统一管理
支持用户工单对接,能够对接JIRA等工单系统,一遍一键提交扫描报告,高效跟进和落实代码漏洞整改。同时能够根据客户的工单系统需求,对接其他工单系统
▲ 产品界面
SCAP产品框架
SCAP以B/S架构的方式提供用户进行交互与管理,支持私有云和公有云部署,能够与Git、SVN等代码仓库集成获取代码,与Jenkins构建集成系统进行集成,系统构建时会自动化触发进行代码扫描。用户可通过检测代码版本对比进行误报自动加白名单,在审计结果输出后,可对审计结果进行导出报告,使用邮件进行报告推送,还与企业的漏洞工单进行对接,实现平台一站式审计服务。
▲ 产品架构
SCAP产品优势
业内顶尖的检测能力:涵盖代码缺陷,质量,木马后门等检测,涵盖2000+种缺陷类型
自主研发,安全可控:SCAP产品是海云安 100% 自主研发,具有自主知识产权,符合国家信息安全产品“自主、可控”的要求
强大的规则库:结合多年的服务经验以及AI人工智能算法,形成了领先业内的规则库和漏洞库
功能强大,灵活部署:SCAP产品拥有强大全面的检测能力,同时在易用、实用方面也广泛受用户好评。产品还可实现对软件安全开发生命周期的全面支持,方便用户使用
Q2: 怎么样才能写出安全的Java代码?不被黑客攻击?
在本文中,我们讨论了对付 13 种不同静态暴露的技巧。对于每种暴露,我们解释了不处理这些安全性问题所造成的影响。我们还为您推荐了一些准则,要开发不受这些静态安全性暴露威胁的、健壮且安全的 Java 应用程序,您应该遵循这些准则。一有合适的时机,我们就提供代码样本(既有暴露的代码也有无暴露的代码)。
对付高严重性暴露的技巧
请遵循下列建议以避免高严重性静态安全性暴露:
限制对变量的访问
让每个类和方法都成为 final,除非有足够的理由不这样做
不要依赖包作用域
使类不可克隆
使类不可序列化
使类不可逆序列化
避免硬编码敏感数据
查找恶意代码
限制对变量的访问
如果将变量声明为 public,那么外部代码就可以操作该变量。这可能会导致安全性暴露。
影响
如果实例变量为 public,那么就可以在类实例上直接访问和操作该实例变量。将实例变量声明为 protected 并不一定能解决这一问题:虽然不可能直接在类实例基础上访问这样的变量,但仍然可以从派生类访问这个变量。
清单 1 演示了带有 public 变量的代码,因为变量为 public 的,所以它暴露了。
清单 1. 带有 public 变量的代码
class Test {
public int id;
protected String name;
Test(){
id = 1;
name = "hello world";
}
//code
}
public class MyClass extends Test{
public void methodIllegalSet(String name){
this.name = name; // this should not be allowed
}
public static void main(String[] args){
Test obj = new Test();
obj.id = 123; // this should not be allowed
MyClass mc = new MyClass();
mc.methodIllegalSet("Illegal Set Value");
}
}
建议
一般来说,应该使用取值方法而不是 public 变量。按照具体问题具体对待的原则,在确定哪些变量特别重要因而应该声明为 private 时,请将编码的方便程度及成本同安全性需要加以比较。清单 2 演示了以下列方式来使之安全的代码:
清单 2. 不带有 public 变量的代码
class Test {
private int id;
private String name;
Test(){
id = 1;
name = "hello world";
}
public void setId(int id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
public int getId(){
return id;
}
public String getName(){
return name;
}
}
让每个类和方法都为 final
不允许扩展的类和方法应该声明为 final。这样做防止了系统外的代码扩展类并修改类的行为。
影响
仅仅将类声明为非 public 并不能防止攻击者扩展类,因为仍然可以从它自己的包内访问该类。
建议
让每个类和方法都成为 final,除非有足够的理由不这样做。按此建议,我们要求您放弃可扩展性,虽然它是使用诸如 Java 语言之类的面向对象语言的主要优点之一。在试图提供安全性时,可扩展性却成了您的敌人;可扩展性只会为攻击者提供更多给您带来麻烦的方法。
不要依赖包作用域
没有显式地标注为 public、private 或 protected 的类、方法和变量在它们自己的包内是可访问的。
影响
如果 Java 包不是封闭的,那么攻击者就可以向包内引入新类并使用该新类来访问您想保护的内容。诸如 java.lang 之类的一些包缺省是封闭的,一些 JVM 也让您封闭自己的包。然而,您最好假定包是不封闭的。
建议
从软件工程观点来看,包作用域具有重要意义,因为它可以阻止对您想隐藏的内容进行偶然的、无意中的访问。但不要依靠它来获取安全性。应该将类、方法和变量显式标注为 public、private 或 protected 中适合您特定需求的那种。
使类不可克隆
克隆允许绕过构造器而轻易地复制类实例。
影响
即使您没有有意使类可克隆,外部源仍然可以定义您的类的子类,并使该子类实现 java.lang.Cloneable。这就让攻击者创建了您的类的新实例。拷贝现有对象的内存映象生成了新的实例;虽然这样做有时候是生成新对象的可接受方法,但是大多数时候是不可接受的。清单 3 说明了因为可克隆而暴露的代码:
清单 3. 可克隆代码
class MyClass{
private int id;
private String name;
public MyClass(){
id=1;
name="HaryPorter";
}
public MyClass(int id,String name){
this.id=id;
this.name=name;
}
public void display(){
System.out.println("Id ="+id+"
"+"Name="+name);
}
}
// hackers code to clone the user class
public class Hacker extends MyClass implements Cloneable {
public static void main(String[] args){
Hacker hack=new Hacker();
try{
MyClass o=(MyClass)hack.clone();
o.display();
}
catch(CloneNotSupportedException e){
e.printStackTrace();
}
}
}
建议
要防止类被克隆,可以将清单 4 中所示的方法添加到您的类中:
清单 4. 使您的代码不可克隆
public final Object clone()
throws java.lang.CloneNotSupportedException{
throw new java.lang.CloneNotSupportedException();
}
如果想让您的类可克隆并且您已经考虑了这一选择的后果,那么您仍然可以保护您的类。要做到这一点,请在您的类中定义一个为 final 的克隆方法,并让它依赖于您的一个超类中的一个非 final 克隆方法,如清单 5 中所示:
清单 5. 以安全的方式使您的代码可克隆
public final Object clone()
throws java.lang.CloneNotSupportedException {
super.clone();
}
类中出现 clone() 方法防止攻击者重新定义您的 clone 方法。
使类不可序列化
序列化允许将类实例中的数据保存在外部文件中。闯入代码可以克隆或复制实例,然后对它进行序列化。
影响
序列化是令人担忧的,因为它允许外部源获取对您的对象的内部状态的控制。这一外部源可以将您的对象之一序列化成攻击者随后可以读取的字节数组,这使得攻击者可以完全审查您的对象的内部状态,包括您标记为 private 的任何字段。它也允许攻击者访问您引用的任何对象的内部状态。
建议
要防止类中的对象被序列化,请在类中定义清单 6 中的 writeObject() 方法:
清单 6. 防止对象序列化
private final void writeObject(ObjectOutputStream out)
throws java.io.NotSerializableException {
throw new java.io.NotSerializableException("This object cannot
be serialized");
}
通过将 writeObject() 方法声明为 final,防止了攻击者覆盖该方法。
使类不可逆序列化
通过使用逆序列化,攻击者可以用外部数据或字节流来实例化类。
影响
不管类是否可以序列化,都可以对它进行逆序列化。外部源可以创建逆序列化成类实例的字节序列。这种可能为您带来了大量风险,因为您不能控制逆序列化对象的状态。请将逆序列化作为您的对象的另一种公共构造器 — 一种您无法控制的构造器。
建议
要防止对对象的逆序列化,应该在您的类中定义清单 7 中的 readObject() 方法:
清单 7. 防止对象逆序列化
private final void readObject(ObjectInputStream in)
throws java.io.NotSerializableException {
throw new java.io.NotSerializableException("This object cannot
be deserialized");
}
通过将该方法声明为 final,防止了攻击者覆盖该方法。
避免硬编码敏感数据
您可能会尝试将诸如加密密钥之类的秘密存放在您的应用程序或库的代码。对于你们开发人员来说,这样做通常会把事情变得更简单。
影响
任何运行您的代码的人都可以完全访问以这种方法存储的秘密。没有什么东西可以防止心怀叵测的程序员或虚拟机窥探您的代码并了解其秘密。
建议
可以以一种只可被您解密的方式将秘密存储在您代码中。在这种情形下,秘密只在于您的代码所使用的算法。这样做没有多大坏处,但不要洋洋得意,认为这样做提供了牢固的保护。您可以遮掩您的源代码或字节码 — 也就是,以一种为了解密必须知道加密格式的方法对源代码或字节码进行加密 — 但攻击者极有可能能够推断出加密格式,对遮掩的代码进行逆向工程从而揭露其秘密。
这一问题的一种可能解决方案是:将敏感数据保存在属性文件中,无论什么时候需要这些数据,都可以从该文件读取。如果数据极其敏感,那么在访问属性文件时,您的应用程序应该使用一些加密/解密技术。
查找恶意代码
从事某个项目的某个心怀叵测的开发人员可能故意引入易受攻击的代码,打算日后利用它。这样的代码在初始化时可能会启动一个后台进程,该进程可以为闯入者开后门。它也可以更改一些敏感数据。
这样的恶意代码有三类:
类中的 main 方法
定义过且未使用的方法
注释中的死代码
影响
入口点程序可能很危险而且有恶意。通常,Java 开发人员往往在其类中编写 main() 方法,这有助于测试单个类的功能。当类从测试转移到生产环境时,带有 main() 方法的类就成为了对应用程序的潜在威胁,因为闯入者将它们用作入口点。
请检查代码中是否有未使用的方法出现。这些方法在测试期间将会通过所有的安全检查,因为在代码中不调用它们 — 但它们可能含有硬编码在它们内部的敏感数据(虽然是测试数据)。引入一小段代码的攻击者随后可能调用这样的方法。
避免最终应用程序中的死代码(注释内的代码)。如果闯入者去掉了对这样的代码的注释,那么代码可能会影响系统的功能性。
可以在清单 8 中看到所有三种类型的恶意代码的示例:
清单 8. 潜在恶意的 Java 代码
public void unusedMethod(){
// code written to harm the system
}
public void usedMethod(){
//unusedMethod(); //code in comment put with bad intentions,
//might affect the system if uncommented
// int x = 100;
// x=x+10; //Code in comment, might affect the
//functionality of the system if uncommented
}
建议
应该将(除启动应用程序的 main() 方法之外的)main() 方法、未使用的方法以及死代码从应用程序代码中除去。在软件交付使用之前,主要开发人员应该对敏感应用程序进行一次全面的代码评审。应该使用“Stub”或“dummy”类代替 main() 方法以测试应用程序的功能。
对付中等严重性暴露的技巧
请遵循下列建议以避免中等严重性静态安全性暴露:
不要依赖初始化
不要通过名称来比较类
不要使用内部类
不要依赖初始化
您可以不运行构造器而分配对象。这些对象使用起来不安全,因为它们不是通过构造器初始化的。
影响
在初始化时验证对象确保了数据的完整性。
例如,请想象为客户创建新帐户的 Account 对象。只有在 Account 期初余额大于 0 时,才可以开设新帐户。可以在构造器里执行这样的验证。有些人未执行构造器而创建 Account 对象,他可能创建了一个具有一些负值的新帐户,这样会使系统不一致,容易受到进一步的干预。
建议
在使用对象之前,请检查对象的初始化过程。要做到这一点,每个类都应该有一个在构造器中设置的私有布尔标志,如清单 9 中的类所示。在每个非 static 方法中,代码在任何进一步执行之前都应该检查该标志的值。如果该标志的值为 true,那么控制应该进一步继续;否则,控制应该抛出一个例外并停止执行。那些从构造器调用的方法将不会检查初始化的变量,因为在调用方法时没有设置标志。因为这些方法并不检查标志,所以应该将它们声明为 private 以防止用户直接访问它们。
清单 9. 使用布尔标志以检查初始化过程
public class MyClass{
private boolean initialized = false;
//Other variables
public MyClass (){
//variable initialization
method1();
initialized = true;
}
private void method1(){ //no need to check for initialization variable
//code
}
public void method2(){
try{
if(initialized==true){
//proceed with the business logic
}
else{
throw new Exception("Illegal State Of the object");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
如果对象由逆序列化进行初始化,那么上面讨论的验证机制将难以奏效,因为在该过程中并不调用构造器。在这种情况下,类应该实现 ObjectInputValidation 接口:
清单 10. 实现 ObjectInputValidation
interface java.io.ObjectInputValidation {
public void validateObject() throws InvalidObjectException;
}
所有验证都应该在 validateObject() 方法中执行。对象还必须调用 ObjectInputStream.RegisterValidation() 方法以为逆序列化对象之后的验证进行注册。 RegisterValidation() 的第一个参数是实现 validateObject() 的对象,通常是对对象自身的引用。注:任何实现 validateObject() 的对象都可能充当对象验证器,但对象通常验证它自己对其它对象的引用。RegisterValidation() 的第二个参数是一个确定回调顺序的整数优先级,优先级数字大的比优先级数字小的先回调。同一优先级内的回调顺序则不确定。
当对象已逆序列化时,ObjectInputStream 按照从高到低的优先级顺序调用每个已注册对象上的 validateObject()。
不要通过名称来比较类
有时候,您可能需要比较两个对象的类,以确定它们是否相同;或者,您可能想看看某个对象是否是某个特定类的实例。因为 JVM 可能包括多个具有相同名称的类(具有相同名称但却在不同包内的类),所以您不应该根据名称来比较类。
影响
如果根据名称来比较类,您可能无意中将您不希望授予别人的权利授予了闯入者的类,因为闯入者可以定义与您的类同名的类。
例如,请假设您想确定某个对象是否是类 com.bar.Foo 的实例。清单 11 演示了完成这一任务的错误方法:
清单 11. 比较类的错误方法
if(obj.getClass().getName().equals("Foo")) // Wrong!
// objects class is named Foo
}else{
// object's class has some other name
}
建议
在那些非得根据名称来比较类的情况下,您必须格外小心,必须确保使用了当前类的 ClassLoader 的当前名称空间,如清单 12 中所示:
清单 12. 比较类的更好方法
if(obj.getClass() == this.getClassLoader().loadClass("com.bar.Foo")){
// object's class is equal to
//the class that this class calls "com.bar.Foo"
}else{
// object's class is not equal to the class that
// this class calls "com.bar.Foo"
}
然而,比较类的更好方法是直接比较类对象看它们是否相等。例如,如果您想确定两个对象 a 和 b 是否属同一个类,那么您就应该使用清单 13 中的代码:
清单 13. 直接比较对象来看它们是否相等
if(a.getClass() == b.getClass()){
// objects have the same class
}else{
// objects have different classes
}
尽可能少用直接名称比较。
不要使用内部类
Java 字节码没有内部类的概念,因为编译器将内部类转换成了普通类,而如果没有将内部类声明为 private,则同一个包内的任何代码恰好能访问该普通类。
影响
因为有这一特性,所以包内的恶意代码可以访问这些内部类。如果内部类能够访问括起外部类的字段,那么情况会变得更糟。可能已经将这些字段声明为 private,这样内部类就被转换成了独立类,但当内部类访问外部类的字段时,编译器就将这些字段从专用(private)的变为在包(package)的作用域内有效的。内部类暴露了已经够糟糕的了,但更糟糕的是编译器使您将某些字段成为 private 的举动成为徒劳。
建议 如果能够不使用内部类就不要使用内部类。
对付低严重性暴露的技巧
请遵循下列建议以避免低严重性静态安全性暴露:
避免返回可变对象
检查本机方法
避免返回可变对象
Java 方法返回对象引用的副本。如果实际对象是可改变的,那么使用这样一个引用调用程序可能会改变它的内容,通常这是我们所不希望见到的。
影响
请考虑这个示例:某个方法返回一个对敏感对象的内部数组的引用,假定该方法的调用程序不改变这些对象。即使数组对象本身是不可改变的,也可以在数组对象以外操作数组的内容,这种操作将反映在返回该数组的对象中。如果该方法返回可改变的对象,那么事情会变得更糟;外部实体可以改变在那个类中声明的 public 变量,这种改变将反映在实际对象中。
清单 14 演示了脆弱性。getExposedObj() 方法返回了 Exposed 对象的引用副本,该对象是可变的:
清单 14. 返回可变对象的引用副本
class Exposed{
private int id;
private String name;
public Exposed(){
}
public Exposed(int id, String name){
this.id = id;
this.name = name;
}
public int getId(){
return id;
}
public String getName(){
return name;
}
public void setId(int id){
this.id=id;
}
public void setName(String name){
this.name = name;
}
public void display(){
System.out.println("Id = "+ id + " Name = "+ name);
}
}
public class Exp12{
private Exposed exposedObj = new Exposed(1,"Harry Porter");
public Exposed getExposedObj(){
return exposedObj; //returns a reference to the object.
}
public static void main(String[] args){
Exp12 exp12 = new Exp12();
exp12.getExposedObj().display();
Exposed exposed = exp12.getExposedObj();
exposed.setId(10);
exposed.setName("Hacker");
exp12.getExposedObj().display();
}
}
建议
如果方法返回可改变的对象,但又不希望调用程序改变该对象,请修改该方法使之不返回实际对象而是返回它的副本或克隆。要改正清单 14 中的代码,请让它返回 Exposed 对象的副本,如清单 15 中所示:
清单 15. 返回可变对象的副本
public Exposed getExposedObj(){
return new Exposed(exposedObj.getId(),exposedObj.getName());
}
或者,您的代码也可以返回 Exposed 对象的克隆。
检查本机方法
本机方法是一种 Java 方法,其实现是用另一种编程语言编写的,如 C 或 C++。有些开发人员实现本机方法,这是因为 Java 语言即使使用即时(just-in-time)编译器也比许多编译过的语言要慢。其它人需要使用本机代码是为了在 JVM 以外实现特定于平台的功能。
影响
使用本机代码时,请小心,因为对这些代码进行验证是不可能的,而且本机代码可能潜在地允许 applet 绕过通常的安全性管理器(Security Manager)和 Java 对设备访问的控制。
建议
如果非得使用本机方法,那么请检查这些方法以确定:
它们返回什么
它们获取什么作为参数
它们是否绕过安全性检查
它们是否是 public、private 等等
它们是否含有绕过包边界从而绕过包保护的方法调用
结束语
编写安全 Java 代码是十分困难的,但本文描述了一些可行的实践来帮您编写安全 Java 代码。这些建议并不能解决您的所有安全性问题,但它们将减少暴露数目。最佳软件安全性实践可以帮助确保软件正常运行。安全至关重要和高可靠系统设计者总是花费大量精力来分析和跟踪软件行为。只有通过将安全性作为至关紧要的系统特性来对待 — 并且从一开始就将它构建到应用程序中,我们才可以避免亡羊补牢似的、修修补补的安全性方法。
参考资料
请通过单击文章顶部或底部的讨论来参加本文的论坛。
了解关于 Java 安全性 API 的更多知识。
developerWorks 安全专题上通常含有有关计算机安全性的优秀资源。
Larry Koved、 Anthony J. Nadalin、Don Neal 和 Tim Lawson 合作编写的 “The evolution of Java security”(developerWorks,1998 年)对 Java 语言的安全性模型早期开发进行了深入探讨。
Sing Li 在他的 Java 安全性系列文章(由两部分组成的)(developerWorks, 2001 年 2 月)中向开发人员显示:尽管社区可能不得不重新考虑 Java 2 中的安全性设计,还是出现了只对开发人员有帮助,可以满足他们的需求的一致的进展:
第一部分
第二部分
John Viega、Tom Mutdosch、 Gary McGraw 和 Ed Felten 合著的 “Statically scanning Java code for security vulnerabilities” (IEEE Software,2000 年 9 月)介绍了一种 Java 工具,可以使用该工具来检查您的 Java 代码中的安全性漏洞。
G. McGraw 和 E. Felten 合作编写的 Securing Java: Getting Down to Business with Mobile Code(John Wiley 和 Sons,1998 年)深入涵盖了 Java 安全性。(文档是 PDF 格式的。)
定期检查 IBM 研究 Java 安全页面以便 IBM 在安全性领域的创新有重要发展时能够跟踪这一创新。
如果您的 Java 代码运行在 S/390 系统上,那么您将需要查阅 S/390 Java 安全页面以获取额外的信息。
关于作者
Bijaya Nanda Sahu 是就职于印度 IBM Global Services 的软件工程师。他从事过各种因特网技术和框架(J2EE、WSBCC、JADE)、 WebSphere 相关技术、UML 和 OOAD 方面的工作。目前,他从事因特网银行安全性问题方面的工作,重点在 WebSphere Application Server 和 Portal Server 上。可以通过 bijaya.sahu@in.ibm.com 和他联系
Q3: 是不是有病毒!
先到这里hhtp://an baidu.com)百度安全中心网上免费24小时杀毒, 按照提示操作。如果进不去,试试以下方法
( 自己常用的方法比较麻烦胆有效)
1重启后一定不要取消杀毒,让杀毒软件在进入XP界面前先杀个毒,
2如果下载不了杀毒软件就在另外一台机子上下载360修复专家,和所有专杀工具拷到机子上,先扫描一下基础木马 ,在扫一下(av终结者) 如果不行再一项一项的杀,不要怕麻烦,除非你想重做系统。
(如果再打不开可以把360.exe改成360.scr 然后运行安装,安装好之后,把360的主程序的后缀名也要改成*.scr 这样在运行 。因为scr和exe的初始化不一样。。所以改后缀名即可。。然后在360里面安装一个专杀工具~!记得,要先断网哦~)!
3,运行安全360,修复IE ,清理一下,然后到安全模式下杀毒。这问题我也刚才遇到一般就可以解决。
4,菲尔多斯下个杀下等, 或者超级巡警 到安全模式下升级杀毒你试试吧 (下个超级兔子处理下)
然后给系统减负.
一,给零时文件夹挪个窝:工具---internet—常规----internet零食文件夹---设置-----移动文件夹—浏览---确定
二,开始—运行—regedit—找到:HKEY-CURRENT-USRE\software\microsoft\windows\currentversion\internet serrings\cache在右键值里找到 persistent的DWORD将其设置成“0”这样每次关机就可以自动清除零食文件夹了。(如果是遨游浏览器就可以直接 :工具—internet—myie—选项(myie)--退出是清除—确定就可玩意了)
三,搬走我的文档,右击我的文档—属性—选一个目标—确定。就是重装系统也没事了。
四.改变文件安装路径,开始---运行—regedit---依次展开:HKEY-LOCAL—MACHINE\software\microsoft\windows\current\ version在右侧窗口找到名为commonfillesdiy键值项双击该项----在打开的编辑字符串----数值数据—改为(d: commonfillesdiy)或者随意指定一个盘符—确定。然后打开任务管理利器,找到explorer exe 结束进程,让后在打开 任务管理器依次打开 文件---新建—(expolrer exe)----确定。
五,系统还原。
```终结者
是中了AV终结者,因为这个病毒会攻击杀毒软件,已经中毒的电脑杀毒软件没法正常启动,双击没反应,因而这时无法用杀毒软件来清除;利用手动解决也相当困难,并且,AV终结者是一批病毒,不能简单的通过分析报告来人工删除。推荐的清除步骤如下:
1. 在能正常上网的电脑上下载AV终结者病毒专杀工具:金山提供的专杀工具下载地址:
2. 在正常的电脑上禁止自动播放功能,以避免通过插入U盘或移动硬盘而被病毒感染。禁止方法参考方案附件:
把AV终结者专杀工具从正常的电脑复制到U盘或移动硬盘上,然后再复制到中毒的电脑上。
3. 执行AV终结者专杀工具,清除已知的病毒,修复被系统配置。
(注:AV终结者专杀工具的重要功能是修复被破坏的系统,包括修复映像劫持;修复被破坏的安全模式;修复隐藏文件夹的正常显示和删除各磁盘分区的自动播放配置。)
4. 不要立即重启电脑,然后启动杀毒软件,升级病毒库,进行全盘扫描。以清除木马下载器下载的其它病毒。
手动清除办法
1.到网上下载IceSword工具,并将该工具改名,如改成abc.exe 名称,这样就可以突破病毒进程对该工具的屏蔽。然后双击打开IceSword工具,结束一个8位数字的EXE文件的进程,有时可能无该进程。
2.利用IceSword的文件管理功能,展开到C:\Program Files\Common Files\Microsoft Shared\MSINFO\下,删除2个8位随机数字的文件,其扩展名分别为:dat 和dll 。再到%windir%\help\目录下,删除同名的.hlp或者同名的.chm文件,该文件为系统帮助文件图标。
3. 然后到各个硬盘根目录下面删除Autorun.inf 文件和可疑的8位数字文件,注意,不要直接双击打开各个硬盘分区,而应该利用Windows资源管理器左边的树状目录来浏览。有时电脑中毒后可能无法查看隐藏文件,这时可以利用WinRar软件的文件管理功能来浏览文件和进行删除操作。
4.利用IceSword的注册表管理功能,展开注册表项到:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options],删除里面的IFEO劫持项。
当完成以上操作之后,就可以安装或打开杀毒软件了,然后升级杀毒软件到最新的病毒库,对电脑进行全盘杀毒。(手动清除办法由江民反病毒专家提供)
六,磁盘整理
载AV终结者专杀,注意,要先从另外没病毒的电脑上下载到U盘,当然要关闭U盘监视器.
;classid=0key=(AV终结者)
用AV终结者把木马删掉后,装上360安全卫士和瑞星杀毒软件,把捆绑软件和病毒杀掉,
1.再针对杀不掉的病毒下载专杀杀掉病毒,
2.要么在我的电脑里找到"最后一次正确配置"然后修复
3.系统重装.
这个最有效,别的也可以,但是不全面
回答者:joeyweb - 魔法师 四级 5-17 16:39
我的搞定它。wsyscheck里面有进程管理,找到这个进程选择结束并删除任务,如果还出现多删几次就行了。
下载地址:
这个解决,安装后更新病毒库,把杀毒模式设为开机杀毒就一切OK了。推荐使用真正免费的杀软:Avast!4 Home Edition 杀毒软件。
用邮箱免费注册,激活Avast后便可以免费升级使用14个月。
注意:必须下载家庭版,是免费的,自带防火墙。
相关常见病毒
Backdoor,危害级别:1,
说明: 中文名称—“后门”,是指在用户不知道也不允许的情况下,在被感染的系统上以隐蔽的方式运行可以对被感染的系统进行远程控制,而且用户无法通过正常的方法禁止其运行。“后门” 其实是木马的一种特例,它们之间的区别在于“后门”可以对被感染的系统进行远程控制(如:文件管理、进程控制等)。
Worm,危害级别:2,
说明: 中文名称—“蠕虫”,是指利用系统的漏洞、外发邮件、共享目录、可传输文件的软件(如:MSN、OICQ、IRC等)、可移动存储介质(如:U盘、软盘),这些方式传播自己的病毒。这种类型的病毒其子型行为类型用于表示病毒所使用的传播方式。
Mail,危害级别:1说明:通过邮件传播
IM,危害级别:2,说明:通过某个不明确的载体或多个明确的载体传播自己
MSN,危害级别:3,说明:通过MSN传播
QQ,危害级别:4,说明:通过OICQ传播
ICQ危害级别:5,说明:通过ICQ传播
P2P,危害级别:6,说明:通过P2P软件传播
IRC,危害级别:7,说明:通过ICR传播
其他,说明:不依赖其他软件进行传播的传播方式,如:利用系统漏洞、共享目录、可移动存储介质。
Trojan,危害级别:3,说明: 中文名称—“木马”,是指在用户不知道也不允许的情况下,在被感染的系统上以隐蔽的方式运行,而且用户无法通过正常的方法禁止其运行。这种病毒通常都有利益目的,它的利益目的也就是这种病毒的子行为。
Spy,危害级别:1,说明:窃取用户信息(如文件等)
PSW,危害级别:2,说明:具有窃取密码的行为
DL,危害级别:3,说明:下载病毒并运行,判定条款:没有可调出的任何界面,逻辑功能为:从某网站上下载文件加载或运行.
逻辑条件引发的事件:
事件1、.不能正常下载或下载的文件不能判定为病毒 ,操作准则:该文件不能符合正常软件功能组件标识条款的,确定为:Trojan.DL
事件2.下载的文件是病毒,操作准则: 下载的文件是病毒,确定为: Trojan.DL
IMMSG,危害级别:4,说明:通过某个不明确的载体或多个明确的载体传播即时消息(这一行为与蠕虫的传播行为不同,蠕虫是传播病毒自己,木马仅仅是传播消息)
MSNMSG,危害级别:5,说明:通过MSN传播即时消息
QQMSG,危害级别:6,说明:通过OICQ传播即时消息
ICQMSG,危害级别:7,说明:通过ICQ传播即时消息
UCMSG,危害级别:8,说明:通过UC传播即时消息
Proxy,危害级别:9,说明:将被感染的计算机作为代理服务器
Clicker,危害级别:10,说明:点击指定的网页 ,判定条款:没有可调出的任何界面,逻辑功能为:点击某网页。
操作准则:该文件不符合正常软件功能组件标识条款的,确定为:Trojan.Clicker。
(该文件符合正常软件功能组件标识条款,就参考流氓软件判定规则进行流氓软件判定)
Dialer,危害级别:12,说明:通过拨号来骗取Money的程序 ,注意:无法描述其利益目的但又符合木马病毒的基本特征,则不用具体的子行为进行描述
AOL、Notifier ,按照原来病毒名命名保留。
Virus,危害级别:4,说明:中文名称—“感染型病毒”,是指将病毒代码附加到被感染的宿主文件(如:PE文件、DOS下的COM文件、VBS文件、具有可运行宏的文件)中,使病毒代码在被感染宿主文件运行时取得运行权的病毒。
Harm,危害级别:5,说明:中文名称—“破坏性程序”,是指那些不会传播也不感染,运行后直接破坏本地计算机(如:格式化硬盘、大量删除文件等)导致本地计算机无法正常使用的程序。
Dropper,危害级别:6,说明:中文名称—“释放病毒的程序”,是指不属于正常的安装或自解压程序,并且运行后释放病毒并将它们运行。
判定条款:没有可调出的任何界面,逻辑功能为:自释放文件加载或运行。
逻辑条件引发的事件:
事件1:.释放的文件不是病毒。 操作准则: 释放的文件和释放者本身没逻辑关系并该文件不符合正常软件功能组件标识条款的,确定为:Droper
事件2:释放的文件是病毒。 操作准则: 释放的文件是病毒,确定该文件为:Droper
Hack,危害级别:无 ,说明:中文名称—“黑客工具”,是指可以在本地计算机通过网络攻击其他计算机的工具。
Exploit,漏洞探测攻击工具
DDoser,拒绝服务攻击工具
Flooder,洪水攻击工具 ,注意:不能明确攻击方式并与黑客相关的软件,则不用具体的子行为进行描述
Spam,垃圾邮件
Nuker、Sniffer、Spoofer、Anti,说明:免杀的黑客工具
Binder,危害级别:无 ,说明:捆绑病毒的工具
正常软件功能组件标识条款:被检查的文件体内有以下信息能标识出该文件是正常软件的功能组件:文件版本信息,软件信息(注册表键值、安装目录)等。
宿主文件
宿主文件是指病毒所使用的文件类型,有是否显示的属性。目前的宿主文件有以下几种。
JS 说明:JavaScript脚本文件
VBS 说明:VBScript脚本文件
HTML 说明:HTML文件
Java 说明:Java的Class文件
COM 说明:Dos下的Com文件
EXE 说明:Dos下的Exe文件
Boot 说明:硬盘或软盘引导区
Word 说明:MS公司的Word文件
Excel 说明:MS公司的Excel文件
PE 说明:PE文件
WinREG 说明:注册表文件
Ruby 说明:一种脚本
Python 说明:一种脚本
BAT 说明:BAT脚本文件
IRC 说明:IRC脚本
主名称
病毒的主名称是由分析员根据病毒体的特征字符串、特定行为或者所使用的编译平台来定的,如果无法确定则可以用字符串”Agent”来代替主名称,小于10k大小的文件可以命名为“Samll”。
版本信息
版本信息只允许为数字,对于版本信息不明确的不加版本信息。
主名称变种号
如果病毒的主行为类型、行为类型、宿主文件类型、主名称均相同,则认为是同一家族的病毒,这时需要变种号来区分不同的病毒记录。如果一位版本号不够用则最多可以扩展3位,并且都均为小写字母a—z,如:aa、ab、aaa、aab以此类推。由系统自动计算,不需要人工输入或选择。
附属名称
病毒所使用的有辅助功能的可运行的文件,通常也作为病毒添加到病毒库中,这种类型的病毒记录需要附属名称来与病毒主体的病毒记录进行区分。附属名称目前有以下几种:
Client 说明:后门程序的控制端
KEY_HOOK 说明:用于挂接键盘的模块
API_HOOK 说明:用于挂接API的模块
Install 说明:用于安装病毒的模块
Dll 说明:文件为动态库,并且包含多种功能
(空) 说明:没有附属名称,这条记录是病毒主体记录
附属名称变种号
如果病毒的主行为类型、行为类型、宿主文件类型、主名称、主名称变种号、附属名称均相同,则认为是同一家族的病毒,这时需要变种号来区分不同的病毒记录。变种号为不写字母a—z,如果一位版本号不够用则最多可以扩展3位,如:aa、ab、aaa、aab以此类推。由系统自动计算,不需要人工输入或选择。
病毒长度
病毒长度字段只用于主行为类型为感染型(Virus)的病毒,字段的值为数字。字段值为0,表示病毒长度可变。
Q4: 简述入侵检测常用的四种方法
入侵检测系统所采用的技术可分为特征检测与异常检测两种。
1、特征检测
特征检测(Signature-based detection) 又称Misuse detection ,这一检测假设入侵者活动可以用一种模式来表示,系统的目标是检测主体活动是否符合这些模式。
它可以将已有的入侵方法检查出来,但对新的入侵方法无能为力。其难点在于如何设计模式既能够表达“入侵”现象又不会将正常的活动包含进来。
2、异常检测
异常检测(Anomaly detection) 的假设是入侵者活动异常于正常主体的活动。根据这一理念建立主体正常活动的“活动简档”,将当前主体的活动状况与“活动简档”相比较,当违反其统计规律时,认为该活动可能是“入侵”行为。
异常检测的难题在于如何建立“活动简档”以及如何设计统计算法,从而不把正常的操作作为“入侵”或忽略真正的“入侵”行为。
扩展资料
入侵分类:
1、基于主机
一般主要使用操作系统的审计、跟踪日志作为数据源,某些也会主动与主机系统进行交互以获得不存在于系统日志中的信息以检测入侵。
这种类型的检测系统不需要额外的硬件.对网络流量不敏感,效率高,能准确定位入侵并及时进行反应,但是占用主机资源,依赖于主机的可靠性,所能检测的攻击类型受限。不能检测网络攻击。
2、基于网络
通过被动地监听网络上传输的原始流量,对获取的网络数据进行处理,从中提取有用的信息,再通过与已知攻击特征相匹配或与正常网络行为原型相比较来识别攻击事件。
此类检测系统不依赖操作系统作为检测资源,可应用于不同的操作系统平台;配置简单,不需要任何特殊的审计和登录机制;可检测协议攻击、特定环境的攻击等多种攻击。
但它只能监视经过本网段的活动,无法得到主机系统的实时状态,精确度较差。大部分入侵检测工具都是基于网络的入侵检测系统。
3、分布式
这种入侵检测系统一般为分布式结构,由多个部件组成,在关键主机上采用主机入侵检测,在网络关键节点上采用网络入侵检测,同时分析来自主机系统的审计日志和来自网络的数据流,判断被保护系统是否受到攻击。
参考资料来源:百度百科-入侵检测
java代码后门检测工具的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于web后门检测、java代码后门检测工具的信息别忘了在本站进行查找喔。







