300 likes | 516 Views
프로그램분석 기술과 sw 보안 Airac 의 예를통해서. 이광근 프로그래밍 연구실 서울대 컴퓨터공학부. 3/28/2005 @ NSRI. 차례. 프로그램 분석 기술 소개 Airac 소개 소프트웨어 보안 / 보증에의 응용 ( 안 ) Airac 시연. 프로그래밍 연구실 + 프로그램 분석 시스템 연구단. 1995-2003 KAIST, 2003-now SNU 1998-2003 과기부 창의적연구 진흥사업 지정 프로그램분석 시스템 연구단
E N D
프로그램분석 기술과 sw보안Airac의 예를통해서 이광근 프로그래밍 연구실 서울대 컴퓨터공학부 3/28/2005 @ NSRI
차례 • 프로그램 분석 기술 소개 • Airac 소개 • 소프트웨어 보안/보증에의 응용(안) • Airac 시연
프로그래밍 연구실 + 프로그램 분석 시스템 연구단 • 1995-2003 KAIST, 2003-now SNU • 1998-2003 과기부 창의적연구 진흥사업 지정 프로그램분석 시스템 연구단 • 목표: 무결점 소프트웨어를 만들고 확인할 수 있는 원천 기술 연구 “The Open Problem in Computer Science”
원천 기술 프로그램 분석기술 static program analysis 실행전에 실행성질을 자동으로 안전하게 어림잡는 일반적인 방법
프로그램 분석static program analysis • “실행전”: 프로그램을 돌리기 전에 • “실행성질”: 실행중의 프로그램 성질 • “자동으로”: 프로그램이 프로그램을 분석 • “안전하게”: 모든 실제상황을 포섭 • “어림잡는”: 군더더기가없을 순 없다 • “일반적인”: 대상 소스 언어와 실행성질이 무제한
프로그램 분석기술의 쓰임새 • 프로그램의 오류 자동 검증 • 실행중에 이러이러하면 안되는 데, 혹시? • “오류”의 정의에 따라서 다양하게: “보안 오류” • 프로그램 최적화를 위한 정보제공 • 이 부분은 중복되는 일을 하는군 • 이 부분은 자원을 필요이상으로 소모하는군 • 프로그램 이해/관리를 위한 정보제공 • 이 변수와 관계되는 프로그램 부분들만 • 프로그램이 어느 테이블을 건드리는지
프로그램 분석 기술들 • 프로그램 분석(static program analysis) • 요약해석(abstract interpretation) • 타입시스템(type system) • 자료흐름분석(data flow analysis) • 자동증명(theorem proving) • 모델검증(model checking) • 20-30년 동안 학교에서 무르익은 기술 • 위의 기술의 조합이 이제 비로소 실용적인 모습으로 현장으로 퍼지고 있슴
프로그램분석 기술이 실제에 적용된 예 • Microsoft (2002년-현재) • device driver sw 검증에 적용 • 안전한, 오류없는 sw개발에 집중: 요즘 Bill Gates 연설의 기초 • AirBus (2002년-현재) • aviation controller모듈 sw 검증에 적용 • AirBus sw개발 프로세스의 표준으로 프로그램분석 과정을 포함 • 삼성전자 소프트웨어 센터 (2004년-현재) • Airac: 다양한 sw 검증에 적용 • 이기술에 특화된 회사들 등장: • AbsInt, Coverity, PolySpace technologies, Trusted Logic, GrammaTech, Esterel Technologies, etc.
프로그램의 실행 Value = Int U Real U Addr U Tree U Exception val(x) val(*p) val(p) time 1 2 11 3 4 5 11 3 4 5 11 3 4 5 22 8 9 8 9 8 9 2 3 4 99 2 3 4 99 2 3 4
프로그램의 분석: 요약실행 V = I U R U A U T U E v(x) v(*p) v(p) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 pgm point
프로그램의 실행 Value = Int U Real U Addr U Tree U List U Exception v(x) v(y) time 1 2 11 3 4 5 11 3 4 5 11 3 4 5 22 8 9 8 9 8 9 2 3 4 99 2 3 4 99 2 3 4
프로그램의 분석: 오류 검증 V = I U R U A U T U E v(x) v(*p) v(y) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 pgm point
프로그램의 실행 Value = Int U Real U Addr U Tree U List U Exception val(x) val(y) time 1 2 11 3 4 5 11 3 4 5 11 3 4 5 22 8 9 8 9 8 9 2 3 4 99 2 3 4 99 2 3 4
프로그램의 분석: 허위경보 V = I U R U A U T U E v(x) v(y) 프로그램 분석의 정확도 문제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 pgm point
프로그램의 실행 Value = Int U Real U Addr U Tree U List U Exception val(x-y) 0 time 1 2 11 3 4 5 11 3 4 5 11 3 4 5 22 8 9 8 9 8 9 2 3 4 99 2 3 4 99 2 3 4
프로그램의 분석: 관계형분석 V = I U R U A U T U E v(x-y) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 pgm point
프로그램 분석의 3-스텝 입력: 프로그램 • step1: “연립방정식”을 세운다 • 모든것이 요약된 세계에서 (abstract domain) • 모든 프로그램의 상태가 어떻게 변화되 가는지 (abstract execution flow) • step2: 그 방정식을 푼다 • step3: 그 해를 가지고 결론을 내린다 • 있는가 없는가? 같은가 다른가?
AiracStatic Analyzer for Automatic Verification of Array Index Ranges in C Programs
Airac • C 프로그램의 메모리접근 오류 자동 검출 int *c = (int *)malloc(sizeof(int)*10); c[i] = 1; c[i+ f()] = 1; c[*k + (*g)()] = 1; x = c; x[1] = 1; y = c + f(); y[*(y+1)] = 1; z->a = c; (z->a)[i] = 1; foo(c+2); int foo(int *d) {…d[i] = 1; …}
Airac keywords • C: analyzes ANSI C + (GNU) program • pointers(array, procedure) • controls(procedure, return, break, goto) • intra- and inter-procedural • statically: no test runs • all: complete, no un-noticed bug • automatic: a software • always stops: for infinite-loop programs • modular: for large programs • correct: solid theoretical foundation
Airac vs Swat(2/3) Airac Bugs Coverity
소프트웨어 보안/보증에의 응용(1/2) NSRI 고유의 secret weapon 확보 • sw보안/보증 고도화 및 자동화 엔진 개발 • sw보안 오류 자동 검출기 라이브러리 개발 • 사용자(NSRI agents) 교육/컨설팅 • 효과 • sw보안 기술력 확장 • sw보증 공신력 신장
소프트웨어 보안/보증에의 응용 (2/2) sw보안/보증 고도화 및 도구 개발 • 보안 오류 인증 • “X family”개발: 보안 오류들의 자동 검출기 • 보안오류1: 알려진 해킹기법으로 뚤릴 수 있다 • 보안오류2: 실행 관련 정보가 외부로 유출될 수 있다 • 대상소스: Java, C, C++, C#, 웹소스 언어… • 논리 오류 검증에 기초 • “Airac family”개발: 논리 오류들의 자동 검출기 • 논리오류: buffer overrun, null dereference, … • 대상소스: C, C++, Java, C#, 웹소스 언어
감사합니다 ropas.snu.ac.kr/airac