国产美女一级毛片精品久久久|婷婷影院在线综合免费视频|最新国产午夜精品视频成人|久久精品九九无码免费

編碼漏洞:C、C++ 和Java的安全編碼?

來(lái)源:北大青鳥(niǎo)飛迅校區(qū)|發(fā)布時(shí)間:2013-04-27 17:49:35

  對(duì)于所有類型環(huán)境中的開(kāi)發(fā)人員來(lái)說(shuō),安全性正成為一個(gè)越來(lái)越重要的主題,即便過(guò)去一直認(rèn)為安全性不成問(wèn)題的嵌入式系統(tǒng)也是如此。本文將介紹幾種類型的編碼漏洞,指出漏洞是什么、如何降低代碼被攻擊的風(fēng)險(xiǎn)、如何更好地找出代碼中的此類缺陷。

  注入攻擊

  通過(guò)將信息注入正在運(yùn)行的流程,攻擊者可以危害進(jìn)程的運(yùn)行狀態(tài),以反射到開(kāi)發(fā)人員無(wú)法保護(hù)的某種最終目標(biāo)。例如,攻擊者可能會(huì)通過(guò)堆棧溢出(stack corruption)將代碼注入進(jìn)程,從而執(zhí)行攻擊者選定的代碼。此外,攻擊者也可能嘗試將數(shù)據(jù)注入數(shù)據(jù)庫(kù),供將來(lái)使用;或?qū)⑽词鼙Wo(hù)的字符串注入數(shù)據(jù)庫(kù)查詢,獲取比開(kāi)發(fā)人員更多的信息。無(wú)論出于怎樣的目的,注入總是一件壞事,總是需要謹(jǐn)慎對(duì)待的。

  最惡劣的注入攻擊形式也許是代碼注入——將新代碼置入正在運(yùn)行的進(jìn)程的內(nèi)存空間,隨后指示正在運(yùn)行的進(jìn)程執(zhí)行這些代碼。此類攻擊如果成功,則幾乎可以進(jìn)行任何操作,因?yàn)檎谶\(yùn)行的進(jìn)程完全被劫持,可執(zhí)行攻擊者希望執(zhí)行的任何代碼。

  此類攻擊最著名的示例之一就是 Windows 動(dòng)畫(huà)光標(biāo)攻擊,這正是本文要討論的模式。攻擊者利用一個(gè)簡(jiǎn)單的 Web 頁(yè)面將形式不當(dāng)?shù)膭?dòng)畫(huà)光標(biāo)文件下載到查看者的 PC 中,導(dǎo)致瀏覽器調(diào)用此動(dòng)畫(huà)光標(biāo),動(dòng)畫(huà)光標(biāo)調(diào)用時(shí)可能發(fā)生任意代碼的注入。實(shí)際上,這是一個(gè)完美的攻擊載體:因?yàn)樗灰髮?duì)被攻擊機(jī)器的任何實(shí)際訪問(wèn)、最終用戶根本意識(shí)不到任何可能發(fā)生的麻煩;此外,如果攻擊效果的惡意也是適度的,則對(duì)最終用戶的外部影響幾乎是零。

  考慮示例 1(a),當(dāng)然,這改寫自 Windows 攻擊,它構(gòu)成了此類攻擊載體的基礎(chǔ)。這里的開(kāi)發(fā)人員對(duì)于傳入流的可靠性做出了基本的假設(shè)。信任流和并相信一切都沒(méi)問(wèn)題。使用基于堆棧的將被非串形化(deserialized)的類型調(diào)用函數(shù),未知數(shù)據(jù)流和代碼注入肯定會(huì)在某個(gè)時(shí)間點(diǎn)出現(xiàn)。

  (a)

  void LoadTypeFromStream(unsigned char* stream, SOMETYPE* typtr)

  {

  int len;

  // Get the size of our type's serialized form

  memcpy(&len, stream, sizeof(int));

  // De-serialize the type

  memcpy(typtr, stream + sizeof(int), len);

  }

  (b)

  void foo(unsigned char* stream)

  {

  SOMETYPE ty;

  LoadTypeFromStream(stream, &ty);

  }

  (c)

  void LoadTypeFromStream

  (unsigned char* stream, SOMETYPE* typtr)

  {

  int len;

  // Get the size of our type's serialized form

  memcpy(&len, stream, sizeof(int));

  // GUARD

  if( len < 0 || len > sizeof(SOMETYPE) )

  throw TaintedDataException();

  // De-serialize the type

  memcpy(typtr, stream + sizeof(int), len);

上一篇:Java+中什么是半靜態(tài)語(yǔ)言?原理及價(jià)值
下一篇:Java兩種導(dǎo)入包的機(jī)制解析

招生熱線: 4008-0731-86 / 0731-82186801

學(xué)校地址: 長(zhǎng)沙市天心區(qū)團(tuán)結(jié)路6號(hào)

Copyright © 2006 | 湖南大計(jì)信息科技有限公司 版權(quán)所有

湘ICP備14017520號(hào)-3

關(guān)注我們
在線咨詢
嘿,我來(lái)幫您!