🚧 오류 상황 대응 부재 시뮬레이터 KISA A-4 · 오류 상황 대응 부재

송금 루틴이 일련의 단계를 수행합니다 — 로그 열기, 버퍼 할당, 트랜잭션 시작, 출금, 입금, 커밋. 취약 버전은 모든 반환값을 무시해, 한 단계가 실패해도 잘못된 상태로 계속 진행합니다: 돈이 빠져나갔는데 입금은 안 됩니다.

⚙ 실패 주입

어느 단계가 실패할지 선택한 뒤, 동일한 실패로 두 버전을 실행하세요. 취약 버전은 그대로 진행하고, 안전 버전은 감지·롤백·안전 중단하는 차이를 확인하세요.

① 취약: 반환값 무시 VULNERABLE

(실행 전)

② 안전: 모든 반환 검사 · 실패 시 롤백 SECURE

(실행 전)

③ 취약 vs 안전 코드

VULNERABLE
// C / pseudo — 반환값을 아무도 안 본다
FILE *f = fopen(path, "a");      // NULL 일 수 있음
char *buf = malloc(size);        // NULL 일 수 있음
fprintf(f, ...);                 // f==NULL 이면 크래시
db_begin(tx);
db_debit(tx, from, amount);      // 성공 가정
db_credit(tx, to, amount);       // 네트워크 실패해도 무시
db_commit(tx);                   // 실패해도 무시
return OK;                        // 항상 성공이라 보고
SECURE
FILE *f = fopen(path, "a");
if (!f) return ERR_LOG;                       // 검사
char *buf = malloc(size);
if (!buf){ fclose(f); return ERR_MEM; }       // 검사 + 정리
if (db_begin(tx) != OK){ ... return ERR_TX; }
if (db_debit(tx, from, amount) != OK){
    db_rollback(tx); return ERR_DEBIT; }
if (db_credit(tx, to, amount) != OK){
    db_rollback(tx); return ERR_CREDIT; }     // 출금 원복
if (db_commit(tx) != OK){
    db_rollback(tx); return ERR_COMMIT; }
return OK;                                     // 진짜 성공일 때만
위험한 이유: 반환값/오류코드를 무시하면 잘못된 상태로 실행이 계속됩니다 — NULL 포인터를 쓰거나, 버퍼가 절반만 기록되거나, 한 계좌에서 돈이 빠졌는데 상대 계좌에 도착하지 않습니다. 데이터가 깨졌는데도 시스템은 성공으로 보고합니다. 방어: 호출 지점마다 모든 반환값을 검사/예외를 처리하고, 실패 시 자원 정리·트랜잭션 롤백·명확한 오류로 안전하게 중단하세요. 절대 조용히 진행하지 마세요.
⚠️ 교육용 시뮬레이션입니다. 송금 파이프라인·실패·원장은 페이지 내부 mock이며, 실제 파일·메모리·네트워크·데이터베이스를 건드리지 않습니다.