新聞中心
Linux系統(tǒng)一直以來都以其穩(wěn)定性和安全性著稱,但是這并不意味著它是完美的。其中一個(gè)嚴(yán)重的問題就是棧溢出。在Linux 64位系統(tǒng)中,棧溢出仍然是最常見的漏洞之一。本文將深入,并進(jìn)一步了解如何預(yù)防和解決這些安全漏洞。

成都創(chuàng)新互聯(lián)是一家專業(yè)提供玉樹企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、網(wǎng)站制作、H5建站、小程序制作等業(yè)務(wù)。10年已為玉樹眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
什么是棧溢出?
在計(jì)算機(jī)系統(tǒng)中,程序的運(yùn)行需要使用棧(stack)來分配內(nèi)存,棧用于保存程序執(zhí)行過程中的一些臨時(shí)變量和函數(shù)調(diào)用。常見的棧溢出是指當(dāng)程序往棧里寫入數(shù)據(jù)時(shí),超出了棧的大小,將數(shù)據(jù)寫到了已分配給其他變量的內(nèi)存位置。這種情況可能會(huì)導(dǎo)致程序崩潰、數(shù)據(jù)損壞、攻擊者利用等問題,特別是在惡意攻擊下,棧溢出有可能成為黑客利用來入侵系統(tǒng)的手段。
在Linux 64位系統(tǒng)中,棧通常由高地址向低地址生長。當(dāng)程序執(zhí)行一個(gè)函數(shù)時(shí),會(huì)將該函數(shù)的參數(shù)和局部變量壓入棧中。棧的大小是固定的,這就意味著最多只能壓入有限數(shù)量的數(shù)據(jù)。如果程序試圖往棧里寫入更多數(shù)據(jù),就會(huì)導(dǎo)致棧溢出。
影響棧溢出的因素
在Linux 64位系統(tǒng)中,影響棧溢出的因素包括:
1. 緩沖區(qū)溢出:當(dāng)輸入的數(shù)據(jù)長度超出了變量定義時(shí),就會(huì)導(dǎo)致緩沖區(qū)溢出。攻擊者可以通過輸入過長的串來讓程序崩潰或者利用溢出漏洞入侵系統(tǒng)。
2. 棧保護(hù)機(jī)制的缺失:在一些軟件中,缺乏棧保護(hù)機(jī)制會(huì)導(dǎo)致攻擊者可以繞過系統(tǒng)的安全機(jī)制,利用棧溢出漏洞入侵系統(tǒng)。
3. 代碼中的錯(cuò)誤:代碼中的錯(cuò)誤可能會(huì)導(dǎo)致棧溢出,例如,指針過度或無效的內(nèi)存訪問。
防止棧溢出的方法
在Linux 64位系統(tǒng)中,有一些方法可以用來防止棧溢出:
1. 代碼審查:通過定期審查代碼可以發(fā)現(xiàn)和糾正代碼中的錯(cuò)誤,從而避免棧溢出。
2. 編譯器選項(xiàng):編譯器選項(xiàng)可以對(duì)代碼進(jìn)行編譯和優(yōu)化,以避免棧溢出。例如,可以使用-fstack-protector選項(xiàng)來開啟棧保護(hù)機(jī)制。
3. 棧保護(hù)工具:棧保護(hù)工具可以檢測和防止棧溢出漏洞,例如,關(guān)注棧保護(hù)(SSP)、安全增強(qiáng)型Linux(SELinux)和內(nèi)核遺留對(duì)象棧保證(KROP)等。
4. 漏洞掃描:定期掃描系統(tǒng)中的漏洞,及早發(fā)現(xiàn)和修復(fù)安全漏洞。
結(jié)論
棧溢出是Linux系統(tǒng)中常見的安全問題之一。通過深入了解棧溢出的原因和影響因素,以及防止棧溢出的方法,可以有效地提升系統(tǒng)的安全性。在Linux 64位系統(tǒng)中,建議要選擇適合的編譯器選項(xiàng)和棧保護(hù)工具,并定期對(duì)系統(tǒng)進(jìn)行漏洞掃描和代碼審查,以確保系統(tǒng)的安全性。
相關(guān)問題拓展閱讀:
- Linux里面JVM內(nèi)存怎么設(shè)置
Linux里面JVM內(nèi)存怎么設(shè)置
一、堆內(nèi)存相關(guān)配置
設(shè)置歷漏堆初始值
指令1:-Xms2g
指令2:-XX:InitialHeapSize=2023m
設(shè)置堆區(qū)更大值
指令1:`-Xmx2g`
指令2: -XX:MaxHeapSize=2023m
縮小堆內(nèi)存的時(shí)機(jī)
-XX:MaxHeapFreeRatio=70//堆內(nèi)存使用率大于70時(shí)擴(kuò)張堆內(nèi)存,xms=xmx時(shí)該參數(shù)無效,默認(rèn)值70
擴(kuò)張堆內(nèi)存的時(shí)機(jī)
-XX:MinHeapFreeRatio=40//堆內(nèi)存使用率小于40時(shí)縮減堆內(nèi)存,xms=xmx時(shí)該參數(shù)無效,默認(rèn)值40
新生代內(nèi)存配置
指令1:-Xmn512m
指令2:-XX:MaxNewSize=512m
2個(gè)survivor區(qū)和Eden區(qū)大小比率
指令:-XX:SurvivorRatio=6 //S區(qū)和Eden區(qū)占新生代比率為1:6,兩個(gè)S區(qū)2:6
新生代和老年代的占比
-XX:NewRatio=4 //表示新生代:老年代 = 1:4 即老年代占整個(gè)堆的4/5;默認(rèn)值=2
二、方法區(qū)內(nèi)存配置常用參數(shù)
初始化的Metaspace大小,
-XX:MetaspaceSize :
Metaspace更大值
-XX:MaxMetaspaceSize
三、線程棧內(nèi)存配置常用參數(shù)
每個(gè)線程棧更大值
指令1:-Xss256k
指令2:-XX:ThreadStackSize=256k
注意:
棧肢擾爛設(shè)置太大,會(huì)導(dǎo)致線程創(chuàng)建減少。
棧設(shè)置小,會(huì)導(dǎo)致深入不夠,深度的遞歸會(huì)導(dǎo)致棧溢出。
建議棧深度設(shè)置在
四、配置垃圾收集器
Serial垃圾收集器(新生代)
開啟:-XX:+UseSerialGC
關(guān)閉:-XX:-UseSerialGC
//新生代使用Serial 老年代則使用SerialOld
ParNew垃圾收集器(新生代)
開啟 -XX:+UseParNewGC
關(guān)閉 -XX:-UseParNewGC
//新生代使用功能ParNew 老年代則使用功能CMS
Parallel Scavenge收集器(新生代)
開啟 -XX:+UseParallelOldGC
關(guān)閉 -XX:-UseParallelOldGC
//新生代使用功能Parallel Scavenge 老年代李滑將會(huì)使用Parallel Old收集器
ParallelOl垃圾收集器(老年代)
開啟 -XX:+UseParallelGC
關(guān)閉 -XX:-UseParallelGC
//新生代使用功能Parallel Scavenge 老年代將會(huì)使用Parallel Old收集器
CMS垃圾收集器(老年代)
開啟 -XX:+UseConcMarkSweepGC
關(guān)閉 -XX:-UseConcMarkSweepGC
G1垃圾收集器
開啟 -XX:+UseG1GC
關(guān)閉 -XX:-UseG1GC
五、GC策略配置
GC并行執(zhí)行線程數(shù)
-XX:ParallelGCThreads=16
新生代可容納的更大對(duì)象
-XX:PretenureSizeThreshold=//大于此值的對(duì)象直接會(huì)分配到老年代,設(shè)置為0則沒有限制。 //避免在Eden區(qū)和Survivor區(qū)發(fā)生大量的內(nèi)存復(fù)制,該參數(shù)只對(duì)Serial和ParNew收集器有效,Parallel Scavenge并不認(rèn)識(shí)該參數(shù)
進(jìn)入老年代的GC年齡
進(jìn)入老年代最小的GC年齡
-XX:InitialTenuringThreshol=7 //年輕代對(duì)象轉(zhuǎn)換為老年代對(duì)象最小年齡值,默認(rèn)值7,對(duì)象在堅(jiān)持過一次Minor GC之后,年齡就加1,每個(gè)對(duì)象在堅(jiān)持過一次Minor GC之后,年齡就增加1
進(jìn)入老年代更大的GC年齡
-XX:MaxTenuringThreshold=15 //年輕代對(duì)象轉(zhuǎn)換為老年代對(duì)象更大年齡值,默認(rèn)值15
六、GC日志信息配置
配置GC文件路徑
-Xloggc:/data/gclog/gc.log//固定路徑名稱生成 -Xloggc:/home/GCEASY/gc-%t.log //根據(jù)時(shí)間生成
滾動(dòng)生成日志
日志文件達(dá)到一定大小后,生成另一個(gè)文件。須配置Xloggc
開啟 -XX:+UseGCLogFileRotation
關(guān)閉 -XX:-UseGCLogFileRotation
-XX:NumberOfGCLogFiles=4 //滾動(dòng)GC日志文件數(shù),默認(rèn)0,不滾動(dòng) -XX:GCLogFileSize=100k //GC文件滾動(dòng)大小,需配置UseGCLogFileRotation,設(shè)置為0表示僅通過jcmd命令觸發(fā)
jar包啟動(dòng)時(shí)指定對(duì)應(yīng)參數(shù),比如我的工程啟動(dòng)銀答命令就是這樣的
啟動(dòng)命令,打碼部分為工程名
常見參數(shù)如下
1.-Xms:初始堆大小。只鋒宏慧要啟動(dòng),就占用的堆大小。
2.-Xmx:更大堆大小。java.lang.OutOfMemoryError:Java heap這個(gè)錯(cuò)誤可以通過配置-Xms和-Xmx參數(shù)來設(shè)置。
3.-Xss:棧大小分配。棧是每個(gè)線程私有的區(qū)域,通常只有幾百K大小,決定了函數(shù)調(diào)用的深度,而局部變量、參數(shù)都分配到棧上。
當(dāng)出現(xiàn)大量局部變量,遞歸時(shí),會(huì)發(fā)生??臻gOOM(java.lang.StackOverflowError)之類的錯(cuò)誤。
4.XX:NewSize:設(shè)置新生代大小的絕對(duì)值。
5.-XX:NewRatio:設(shè)置年輕代和年老代的比值。比如設(shè)置為3,則新生代:老年代=1:3,新生代占總heap的1/4。
6.-XX:MaxPermSize:設(shè)置持久代大小。
java.lang.OutOfMemoryError:PermGenspace這個(gè)OOM錯(cuò)誤需要合理調(diào)大PermSize和MaxPermSize大小。
7.-XX:SurvivorRatio:年輕代中Eden區(qū)與兩個(gè)Survivor區(qū)的比值。注意,Survivor區(qū)有form和to兩個(gè)。比如設(shè)置為8時(shí),那么eden:form:to=8:1:1。
8.-XX:HeapDumpOnOutOfMemoryError:發(fā)生OOM時(shí)轉(zhuǎn)儲(chǔ)堆到文件,這是一個(gè)非常好的診斷方法。
9.-XX:HeapDumpPath:導(dǎo)出堆的轉(zhuǎn)儲(chǔ)文件路徑。
10.-XX:OnOutOfMemoryError:OOM時(shí),執(zhí)行一個(gè)腳本,比如發(fā)送郵件報(bào)警,重啟程序。后絕弊面跟著一個(gè)腳本的路徑。
linux 64位 棧溢出的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 64位 棧溢出,探究Linux 64位系統(tǒng)棧溢出現(xiàn)象,Linux里面JVM內(nèi)存怎么設(shè)置的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
當(dāng)前題目:探究Linux64位系統(tǒng)棧溢出現(xiàn)象(linux64位棧溢出)
網(wǎng)站地址:http://www.dlmjj.cn/article/cddceej.html


咨詢
建站咨詢
