시간과 상태에 대한 취약점이란? 203p~

프로그램의 동작 과정에서 시간적 개념을 포함한 개념(프로세스 or 스레드 등)이나 시스템 상태에 대한 정보(자원 잠금이나 세션 정보)에 관련된 취약점을 말한다.

ex) 데드락(DeadLock)이나 자원 경쟁에 대한 조건, 세션 고착

경쟁조건 : 검사시점과 사용시점

병렬시스템에서는 자원을 사용하기 앞서 자원의 상태를 검사한다.

하지만 자원을 검사하는 시점과 자원을 사용하는 시점이 다르기 때문에, 이 둘 사이의 간극동안 존재하던 자원이 사라져 상태가 변하는 경우가 발생한다.

image.png

TOC(Time of Check) → 해당파일이 존재하는지 검사하는 과정

TOU(Time of Use) → 실제 사용 지점

class FileAccessThread extends Thread{
	// synchronized 를 사용함으로써 블록을 수행하는 동안 지정된 객체에 lock이
	// 걸려서 다른 Thread 객체 f에 접근할수 없다.
	public synchronized void run(){
		try{
			File f new File("Test_367.txt"); 
			if(f.exists()){
				BufferedReader br = new BufferedReader(new FileReader(f)); br.close();
			}
		}
		catch(IOException e) { System.err.println("IOException occured"); }
	}
}

class FileDeleteThread extends Thread{
	public synchronized void run(){
		File f = new File("test.txt");
		if(f.exist()){
			f.delete();
		}
	}
}

-----------------------------------------------------------------------------
public class S367 |
	public static void main(String[] args) {
		FileAccessThread fileAccessThread = new FileAccessThread();
		FileDelete Thread fileDeleteThread = new FileDelete Thread();
		fileAccessThread.start();
		fileDeleteThread.start();
	}
}

제어문을 사용하지 않은 재귀함수

재귀의 순환횟수를 제어하지 못하여 할당된 메모리나 프로그램 스택등의 자원을 과다하게 사용하면 위험하다. 대부분 귀납조건이 없는 재귀함수는 무한루프에 빠져들게 되고 자원고갈을 유발하여 시스템의 정상적인 운영을 막는다.