• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 學習電腦 > 電腦安全 > 系統安全 >

    PHP場景中getshell防御思路是什么

    時間: 加城1195 分享

      PHP場景中getshell防御思路可能很多人都不知道,那么具體原理思路是什么呢?下面一起看看PHP場景中getshell防御思路分享,希望能幫到需要的人!

      PHP擴展

      防御方案使用了PHP擴展來完成阻斷。PHP內核支持C/C++開發一些擴展功能,并且提供了一個框架 – ext_skel幫助生成基本的代碼簡化開發,由于PHP擴展并不涉及底層的資源管理,所以編寫一個PHP擴展和編寫一個C應用程序是一樣的。下圖展示了PHP擴展所處的結構層次,擴展位于PHP內核ZEND 和 PHP應用層代碼之間,那么利用PHP擴展可以:

      1) 監控PHP應用層代碼的執行細節,包括執行CGI、函數名、參數等;

      2) 調用PHP內核ZEND提供的API接口,包括禁用類、修改配置選項等。

      PHP場景中getshell防御思路分享

      3 相關知識

      3.1 HOOKPHP代碼

      PHP是解釋型語言,代碼被翻譯為中間字節碼由ZEND引擎解析執行。PHP把中間字節碼稱之為OPCODE,每個OPCODE對應ZEND底層的一個處理函數,ZEND引擎最終執行這個處理函數。實現HOOK功能只需要改變HOOK OPCODE對應的處理函數即可,而ZEND預先就提供了一個現成的接口:zend_set_user_opcode_handler。防御方案只需要HOOK以下三個OPCODE:

      ZEND_INCLUDE_OR_EVAL — eval、require等

      ZEND_DO_FCALL — 函數執行system等

      ZEND_DO_FCALL_BY_NAME — 變量函數執行 $func = “system”;$func();

      舉例:

      ZEND_DO_FCALL這個OPCODE對應的功能是函數調用,如果需要HOOK所有的函數調用:

      1) 在模塊初始化函數中使用zend_set_user_opcode_handler修改ZEND_DO_FCALL新的處理函數為mysub:

      PHP_MINIT_FUNCTION(phpips){

      zend_set_user_opcode_handler(ZEND_DO_FCALL, mysub);

      return SUCCESS;

      }

      2) 在自定義函數中實現自己需要的功能并返回原來的處理函數:

      void mysub(){

      自定義功能;

      return ZEND_USER_OPCODE_DISPATCH;

      }

      3.2 ZEND接口

      HOOK之外還需要獲取一些基本信息或功能,比如:

      1) 獲取執行的PHP腳本名,可調用ZEND的接口zend_get_executed_filename:

      char *cgi_name = (char*)zend_get_executed_filename(TSRMLS_C);

      2) 禁用一些類庫,可使用zend_disable_class接口;

      ZEND提供了很多豐富的接口,可根據需求選擇調用。

      3.3 數據結構

      PHP是弱類型語言,其上層并不區分變量類型,變量底層對應的是一個union結構體,以php-5.3.6版本舉例,結構體在Zend/zend.h文件中定義;內容如下:

      typedef union _zvalue_value {

      long lval; /* longvalue */

      double dval; /* double value */

      struct {

      char *val;

      int len;

      } str;

      HashTable *ht; /* hash table value*/

      zend_object_value obj;

      } zvalue_value;

      PHP是在底層區分開了變量類型;在union結構體中有個非常重要的結構體HashTable,PHP中的數組結構就是利用HashTable這個結構體實現,如果變量是個數組,獲取變量內容需要遍歷這塊HashTable,數據結構這塊不做太多介紹。ZEND底層用zval這個結構體存儲變量,同時ZEND提供了幾個宏可以方便的轉換zval到具體的數據類型,比如把zval類型轉換為字符串 – zval el; Z_STRVAL_P(el),常用的還有:

      Z_LVAL_P、Z_DVAL_P、Z_ARRVAL_P等,以上宏列表在 Zend/zend_operators.h有定義。

      4 規則策略

      4.1 基本思路

      我們需要解決的問題是getshell、主機敏感文件泄漏等問題。如果限制住PHP腳本執行命令 和 翻閱文件的功能,就達到了目的。同時,由于讀取文件的接口非常多,使用場景也較多,因此采取禁用打開目錄接口來側面達到禁止翻閱文件的目的,不能遍歷目錄便無法得到文件名,可以有效的達到目標。故最終形成的最終策略如下:

      1) 禁用掉執行命令的接口

      2) 禁用掉打開目錄的接口

      禁用函數有一些需要注意的問題:

      1) PHP接口還是比較繁多復雜的,除了system、exec、opendir、scandir常用函數之外,一些生僻函數比如glob等函數都要考慮全面,另外還有一些回調函數、反射類(PS:部分考慮不全被blackeye和雪人繞過)

      2) PHP SPL提供的一些類庫有文件管理的功能,也需要禁止,比如DirectoryIterator(不過好像沒有白帽子使用過SPL)

      4.2 對抗變形

      PHP使用assert或preg_replace /e執行代碼,調用zend_get_executed_filename獲取的PHP腳本名中會帶有辨別標識,assert對應的是assert code,preg_replace對應的是regexp code;當發現這些特殊的腳本執行了system等4.1中提高的高危函數直接阻斷。以下圖的nonalphanumeric -webshell舉例:

      變形webshell解析后的形式和$_GET[1]($_GET[2])類似,比如傳入1=assert&2=system(whoami)執行代碼,PHP擴展層監控到system函數執行,并且發現PHP腳本名帶regexp code標識,清晰的知道是preg_replace的代碼執行了調用了system,阻斷system。Assert函數同理。總結:擴展并不關注在靜態層如何編碼運算或加密,擴展只監控最后的行為,所以可以很好的解決目前的變形難題。

      1

      圖2nonalphanumeric – webshell

      4.3 減少誤殺

      有時正常的PHP腳本也需要用到命令執行的功能,如何保證其正常運行,不被我們的防御策略阻斷呢?這里提供三種思路:

      1) 寫入權限和執行命令權限互斥

      考慮到入侵者利用上傳漏洞或者其他0DAY getshell得到的文件大多會有W寫權限,防御方往往希望阻止這部分文件擁有過高的權限。

      那么,我們可以去除正常PHP腳本的可寫權限,然后只對有寫權限的PHP腳本實施命令執行等防御策略的阻斷邏輯。這樣即不會影響到業務的使用,又達到了預設場景的防護目標。不過這樣的思路,需要禁用chmod等可以修改文件權限的函數。

      2) 使用白名單邏輯

      粗暴一點的可以用文件名白名單,也就是業務報備過的文件不受阻斷,其它不認識的文件一律禁止。優雅一點的可以對函數參數做白名單,比如提取正常PHP腳本執行命令的參數或者代碼特征,對其進行放行,不認識的特征一律阻斷。

      3) 使用黑名單邏輯

      設定一些已知惡意腳本的黑特征參數,類似于殺毒軟件早期的特征碼思路。

      上述思路在企業推廣時,需要和業務有足夠充分的配合,也都有不完美的地方,如果大家有更多方案或者思路,歡迎與我共同探討。

      補充:校園網安全維護技巧

      校園網絡分為內網和外網,就是說他們可以上學校的內網也可以同時上互聯網,大學的學生平時要玩游戲購物,學校本身有自己的服務器需要維護;

      在大環境下,首先在校園網之間及其互聯網接入處,需要設置防火墻設備,防止外部攻擊,并且要經常更新抵御外來攻擊;

      由于要保護校園網所有用戶的安全,我們要安全加固,除了防火墻還要增加如ips,ids等防病毒入侵檢測設備對外部數據進行分析檢測,確保校園網的安全;

      外面做好防護措施,內部同樣要做好防護措施,因為有的學生電腦可能帶回家或者在外面感染,所以內部核心交換機上要設置vlan隔離,旁掛安全設備對端口進行檢測防護;

      內網可能有ddos攻擊或者arp病毒等傳播,所以我們要對服務器或者電腦安裝殺毒軟件,特別是學校服務器系統等,安全正版安全軟件,保護重要電腦的安全;

      對服務器本身我們要安全server版系統,經常修復漏洞及更新安全軟件,普通電腦一般都是撥號上網,如果有異常上層設備監測一般不影響其他電腦。做好安全防范措施,未雨綢繆。

      相關閱讀:提高服務器安全性的技巧

      1.經常更改系統管理員密碼。---->且密碼最好是大小寫都有

      2.定期更新系統補丁。---->開啟自動更新,并設定到晚上重啟。

      3.檢查系統是否多出超級管理員,檢查是否有帳號被克隆在“開始”>運行中輸入“cmd”>在輸入 net localgroup administrators

      4.在“開始”>運行中輸入“msconfig”檢查隨機啟動的程序和服務,關掉不必要的隨機啟動程序和服務。

      5.服務器上的所有程序盡量安裝程序的最新穩定版。

      6.檢查SERVU是否被創建有執行權限的用戶或者對C盤有讀寫權限的用戶,并且給SERVU設置一個登錄密碼。如果需要請給serv_u設置獨立啟動賬戶。

      7.不要隨意安裝任何的第三方軟件。例如XX優化軟件,XX插件之類的,更不要在服務器上注冊未知的組件。

      8.不要隨意在服務器上使用IE訪問任何網站,杜絕隱患那是必須的。

      9. 檢查系統日志的“安全性”條目,在右側查看近期“審核成功”的登錄

      10.不要在服務器上雙擊運行任何程序,不然怎么中了木馬都不知道。

      11.不要在服務器上用IE打開用戶的硬盤中的網頁,這是危險的行為。

      12.不要在服務器上瀏覽圖片,以前windows就出過GDI 的安全漏洞。

      13.及時的更新病毒庫,查殺病毒。

      14.定時的查看系統各個盤符的磁盤權限,是否為設定的安全權限。

      15.確保你自己的電腦安全,如果自己的電腦不安全,服務器也可能不太安全。


    php防御相關文章:

    1.怎么利用3389端口攻破服務器

    2.如何預防網站被攻擊

    3.如何防范SQL注入漏洞及檢測

    4.服務器基礎知識大全

    5.淺談網站服務器安全維護技巧

    4016524 主站蜘蛛池模板: 国产乱弄免费视频| 中文字幕不卡免费视频| 免费观看性欧美一级| 国产中文字幕在线免费观看| 国产白丝在线观看| 在线观看污污网站| 女人是男人的未来视频| 骚虎视频在线免费观看| 丰满岳乱妇一区二区三区| 亚洲熟女乱色一区二区三区| 又粗又硬又爽的三级视频| 国产在线观看网站萌白酱视频| 性高湖久久久久久久久| 无码毛片视频一区二区本码| 欧美日韩在大午夜爽爽影院| 波多野结衣潜入搜查官| 狠色狠色狠狠色综合久久| 久久亚洲sm情趣捆绑调教| 九九在线精品视频| 久久精品中文騷妇女内射| 久久婷婷五月综合尤物色国产| 先锋影音av资源网| 国产精品大bbwbbwbbw| 国产香港日本三级在线观看| 国产精品视频李雅| 国产成人精品高清不卡在线| 国产又大又粗又硬又长免费| 四虎永久在线精品免费观看地址| 国产精品538一区二区在线| 国产大片51精品免费观看| 国产a不卡片精品免费观看 | 国语做受对白xxxxx在线| 国产美女久久精品香蕉69| 国产欧美日韩一区| 天天操天天干天搞天天射| 国产精品第44页| 国产在线观看色| 国产欧美日韩综合精品一区二区 | 欧美日韩亚洲国产精品| 日韩视频在线一区| 成人欧美一区二区三区视频|