ತಪ್ಪಾಗಿ ಪರಿಗಣಿಸಲ್ಪಟ್ಟ ಪ್ಯಾಚ್ ಲಿನಕ್ಸ್ ಕರ್ನಲ್‌ನಲ್ಲಿನ ಸ್ಪೆಕ್ಟರ್ ದುರ್ಬಲತೆಗೆ ಅಪೂರ್ಣ ಪರಿಹಾರಕ್ಕೆ ಕಾರಣವಾಯಿತು

Grsecurity ಯೋಜನೆಯ ಡೆವಲಪರ್‌ಗಳು ಹಂಚಲಾಗಿದೆ ಕಂಪೈಲರ್ ಎಚ್ಚರಿಕೆಗಳ ಆಲೋಚನೆಯಿಲ್ಲದ ನಿರ್ಮೂಲನೆಯು ಕೋಡ್‌ನಲ್ಲಿನ ದೋಷಗಳಿಗೆ ಹೇಗೆ ಕಾರಣವಾಗಬಹುದು ಎಂಬುದನ್ನು ತೋರಿಸುವ ಎಚ್ಚರಿಕೆಯ ಕಥೆ. ಮೇ ತಿಂಗಳ ಕೊನೆಯಲ್ಲಿ, ptrace ಸಿಸ್ಟಮ್ ಕರೆ ಮೂಲಕ ಸ್ಪೆಕ್ಟರ್ ದುರ್ಬಲತೆಯ ಶೋಷಣೆಯ ಹೊಸ ವೆಕ್ಟರ್‌ಗಾಗಿ Linux ಕರ್ನಲ್‌ಗೆ ಒಂದು ಪರಿಹಾರವನ್ನು ಪ್ರಸ್ತಾಪಿಸಲಾಯಿತು.

ಪ್ಯಾಚ್ ಅನ್ನು ಪರೀಕ್ಷಿಸುವಾಗ, ಡೆವಲಪರ್‌ಗಳು ನಿರ್ಮಿಸುವಾಗ, ಕಂಪೈಲರ್ ಮಿಕ್ಸಿಂಗ್ ಕೋಡ್ ಮತ್ತು ವ್ಯಾಖ್ಯಾನಗಳ ಬಗ್ಗೆ ಎಚ್ಚರಿಕೆಯನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ ಎಂದು ಗಮನಿಸಿದರು (ಕೋಡ್ ನಂತರ ರಚನೆಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ, ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ವೇರಿಯಬಲ್‌ಗೆ ಮೌಲ್ಯವನ್ನು ನಿಗದಿಪಡಿಸಲಾಗಿದೆ):

ಇಂಟ್ ಸೂಚ್ಯಂಕ = n;
ವೇಳೆ (n < HBP_NUM) {ಸೂಚ್ಯಂಕ = array_index_nospec(ಸೂಚ್ಯಂಕ, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[ಸೂಚ್ಯಂಕ];

ಲಿನಸ್ ಒಪ್ಪಿಕೊಂಡರು ತಿದ್ದುಪಡಿ ನಿಮ್ಮ ಮಾಸ್ಟರ್ ಶಾಖೆಗೆ, ತೊಲಗಿಸಿದೆ ವೇರಿಯಬಲ್ ವ್ಯಾಖ್ಯಾನವನ್ನು if ಬ್ಲಾಕ್‌ಗೆ ಚಲಿಸುವ ಮೂಲಕ ಎಚ್ಚರಿಕೆಯಿಂದ:

ವೇಳೆ (n < HBP_NUM) {int index = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[ಸೂಚ್ಯಂಕ];

ಜುಲೈನಲ್ಲಿ, ಫಿಕ್ಸ್ ಅನ್ನು ಸ್ಥಿರವಾದ ಕರ್ನಲ್ ಶಾಖೆಗಳಾದ 4.4, 4.9, 4.14, 4.19 ಮತ್ತು 5.2 ಕ್ಕೆ ಪೋರ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಸ್ಥಿರ ಶಾಖೆಗಳ ನಿರ್ವಾಹಕರು ಸಹ ಎಚ್ಚರಿಕೆಯನ್ನು ಎದುರಿಸಿದರು ಮತ್ತು ಲಿನಸ್‌ನ ಮಾಸ್ಟರ್ ಶಾಖೆಯಲ್ಲಿ ಅದನ್ನು ಈಗಾಗಲೇ ಸರಿಪಡಿಸಲಾಗಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುವ ಬದಲು, ಅವರು ಸ್ವತಃ ಸರಿಪಡಿಸಿದರು. ಸಮಸ್ಯೆಯೆಂದರೆ ಅದರ ಬಗ್ಗೆ ನಿಜವಾಗಿಯೂ ಯೋಚಿಸದೆ, ಅವರು ಕೇವಲ ತೆರಳಿದರು ರಚನೆಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವುದು, ಆದ್ದರಿಂದ ದುರ್ಬಲತೆಯ ವಿರುದ್ಧ ನೇರವಾಗಿ ರಕ್ಷಣೆ ನೀಡುವ array_index_nospec ಗೆ ಕರೆಯನ್ನು ರಚನೆಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವಾಗ ಇನ್ನು ಮುಂದೆ ಬಳಸಲಾಗುವುದಿಲ್ಲ ಮತ್ತು ವೇರಿಯೇಬಲ್ "ಸೂಚ್ಯಂಕ" ಬದಲಿಗೆ "n" ವೇರಿಯಬಲ್ ಅನ್ನು ಯಾವಾಗಲೂ ಬಳಸಲಾಗುತ್ತದೆ:

ಇಂಟ್ ಸೂಚ್ಯಂಕ = n;
ವೇಳೆ (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[index];
ಸೂಚ್ಯಂಕ = array_index_nospec(ಸೂಚ್ಯಂಕ, HBP_NUM);

ಮೂಲ: opennet.ru

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ