GithubHelp home page GithubHelp logo

secfall2015's People

Contributors

bgchun avatar seoyoonm avatar wynot12 avatar

Watchers

 avatar  avatar

secfall2015's Issues

다른 syscall 부르는 방법에 대한 질문

System Call Interposition 부분의 2번인 register에 담긴 system call number와 argument를 바꾸어 원래와 다른 system call을 부르도록 하려고 합니다.

tracer 코드에서 ptrace(PTRACE_SYSCALL, child, NULL, NULL)을 부르면
system call이 불린 이후(entry)와 끝난 다음(exit)에서 tracee가 잡히는 것 같은데
불린 이후에 잡힌다면 system call을 수정할 수 없는 것 아닌가요?
맨 처음 불리는 execve (syscall # 59)을 잡을 때 entry 부분에서 SETREGS를 통해 레지스터 값을 수정해 보았는데 execve가 그대로 불리는 것을 확인했습니다.

도움 부탁드립니다!

과제 제출 경로

안녕하세요~
혹시 이번 프로젝트 1에 대해서 ETL이나 메일 등 과제 제출 경로에 대해서 교수님께서 언급해 주신 적이 있나요?
PPT를 봐도 due date만 공지되어 있고 제출 방법에 대해서는 나와 있지 않은 것 같습니다.
혹시 아시는 분 있으면 알려주시면 감사하겠습니다!

Sandbox project 문서 게시.

안녕하세요, 오늘 수업시간에 말씀 project 문서 업로드하였습니다.
목요일에는 ptrace 사용법에 대해 자세히 설명드리겠습니다.

샌드박스 2번 과제의 Goal 달성이 어렵다고 생각합니다.

문제의 골은 외부로 data 유출을 차단하는 것이고, 최대한 많은 유출 경로를 탐색하라고 되어 있습니다. 하지만 이러한 골을 달성하는 것은 어려워 보입니다.

온갖 기묘한 방법으로 process는 외부로 데이터를 유출할 수 있으며, 따라서 data 유출과 관련이 있는 동작과 관련이 없는 동작을 선별해낼 수 없다고 생각합니다. 극단적인 예를 들면, data의 내용에 따라 비싼 연산, 비싼 시스템 호출, 많은 메모리 작업을 하게 하면 다른 프로세스의 수행 속도에 영향을 미치고, 결국 외부에서는 단순히 다른 정상적인 서비스의 반응 속도를 지켜보는 것만으로 데이터를 유출할 수 있을 겁니다. 그래서 data 유출과 관련 있는 동작과 그렇지 않은 동작을 구분하는 것은 사실상 불가능하다고 생각합니다. 단순한 메모리 할당 요청도 이러한 시나리오에서는 위험하고, 결국 허용할 수 있는 작업은 없을 것이라고 생각합니다.

그래서 과제에서 요구하는 것을 명확히 한계를 지어주시면 과제를 하는 학생들 입장에서는 혼란이 없을 것이라고 생각합니다. 예를 들어 문제에 예제로 나온 filesystem 작업, network 작업, OS에서 명시적으로 제공하는 IPC 서비스, memory mapping만 막아도 과제로는 충분하다거나 하는 한계가 있었으면 합니다. 추가로 어떠한 데이터 유출 위협이 존재하는지 시나리오 또는 모델을 정해주시면, 그에 맞게 적절한 목표를 달성하는 프로그램을 작성할 수 있을 것이라고 생각합니다.

-b 옵션: buffer를 NULL로 쓰는 것인가요, '\0'로 채우는 것인가요?

-b: 해당 process가 사용하는 write system call중 standard output으로의 출력인 경우 모두 buffer의 내용을 NULL로 변경한다.

아마 지정된 buffer 내용을 null character로 채우는 과제가 아닐까 예상하고는 있는데, NULL이라는 말을 쓰는 콘텍스트가 보통 pointer인 경우가 많아서 확인삼아 질문합니다.

buffer를 NULL로 변경하여 시스템 콜을 호출하는 것이 아니라, buffer 내용을 null character로 채우는 게 맞는 것이지요?

KLEE 라이브러리 링크

$ klee -libc=uclibc int_max.bc 
KLEE: NOTE: Using klee-uclibc : /home/lastone817/klee/Release+Asserts/lib/klee-uclibc.bca
KLEE: output directory is "/home/lastone817/2048/klee-out-0"
KLEE: WARNING: undefined reference to variable: COLS
.....
KLEE: WARNING: undefined reference to function: wtouchln
Unable to find size for global variable: acs_map (use will result in out of bounds access)
KLEE: WARNING ONCE: calling external: ioctl(0, 21505, 23928672)
KLEE: WARNING ONCE: calling __user_main with extra arguments.
KLEE: WARNING ONCE: calling external: initscr()
KLEE: ERROR: /home/lastone817/2048/int_max.c:384: failed external call: initscr
KLEE: NOTE: now ignoring this error at this location

KLEE: done: total instructions = 4878
KLEE: done: completed paths = 1
KLEE: done: generated tests = 1

사용하고자 하는 프로그램이 ncurses를 사용하는데, 이처럼 소스코드가 따로 있지 않은 라이브러리들은 KLEE에 어떻게 전달해 줄 수 있는지 궁금합니다.

system call number 변경 가능.

안녕하세요,

7과 #9에서 이야기되었던

system call number 변경 가능여부에 대해서 실험을 해본 결과,
system call number도 argument와 마찬가지로 조작이 가능합니다.

혹시 rax의 값을 변경하신 뒤에 PTRACE_SETREGS를 호출하신거면 원하는 동작이 일어나지 않을 수 있습니다.
system call number는 _orig_rax_에 담겨있으므로 해당 값을 조작하셔야 다른 system call이 불리워집니다.

과제 수행하시는데에 참고하시기 바랍니다.

이외에 과제 스펙 및 문서를 좀더 구체화하는 작업을 하고 있습니다.
원래 교수님께서 의도하신대로, 과제에 하시는데에 크게 부담이 없도록 하는 방향으로 진행하고자 합니다.
(저도 의도했지만 실패한듯 합니다.)

이외 궁금한 사항들은 언제든 질문주시기 바랍니다.
감사합니다. :)

sandbox에서 막아야 할 system call 종류 관련 질문

과제 설명에서

이번 과제에서 차단해야 할 data 유출의 위험이 있는 system call의 유형은 아래와 같다.

system calls for filesystem operation (e.g., open(), create(), write())
system calls for network (e.g., socket(), connect(), bind(), listen(), accept())
system calls for IPC
system calls for memory mapping

이라고 되어 있는데, 현재 제 구현은 기본적으로 이 4개 종류의 system call들을 전부 막는 것으로 되어 있습니다. 정책 파일을 따로 주면 다른 종류의 system call을 막거나 특정 system call들을 막을 수 있게 되어 있고요.
그런데 기본 구현을 4개 종류의 system call들을 모두 막는 것이 아니라 일부분만 막아야 하는 것인가요? 만약 그렇다면 system call 종류가 워낙 많아서 정책을 정하기가 상당히 까다로울 것 같아서 질문 드립니다.
그리고 저 4가지 종류 이외에도 PROCESS, SIGNAL, DESC 관련 system call들이 있는 것으로 알고 있는데 이들 또한 막을 수 있도록 옵션을 주면 extra credit을 받을 수 있나요?

감사합니다.

Sample apps for checking if your emulator's correctly built

@wynot12 kindly provided sample apps for testing the emulator built.
https://github.com/swsnu/secfall2015/tree/master/doc/sampleapps

This is the description I copied.

  • TaintTest: local/ipc/file taint tracking testing
  • TaintReceiver: ipc reception

When you click a button in MainActivity, you can check taint propagation or data leak via TaintNotify or Logcat.

If you do not observe any TaintDroid event when you click a button in the activity, you need to check how you built your emulator.

Project 4 Question

  1. The pdf of project 4 tells us to use Robotium to give input events. However, the apps that we have installed, such as airbnb, do not require any special input events. We just have to click on the airbnb app and it will send gps locations right away (and TaintDroid notifies this)
    Do we still need to use Robotium just to 'click on the app'?

2.The instructions also state:" 앱과 시스템의 어떤 수행경로를 통해서 외부로 유출 되는지 설명 할 수 있어야 한다." I am not clear on what this means. Can you clarify on this and give us examples?
Thank you!

Project 문서 업데이트 안내

안녕하세요,

프로젝트 문서의 스펙을 좀 더 상세화하고 난이도를 좀 더 낮추었습니다(?).

기존 스펙들은 extra credit으로 뺐습니다.
기존에 미리 진행하신 분들을 위해서, default스펙이 extra에 포함되도록 하였습니다.

혼동이 있으실만한 부분들은 의견을 수렴하여 더 업데이트하도록 하겠습니다.

감사합니다.

write system call의 buffer 내용 변경 질문

1번 과제의 requirement 중 하나인 '-b: 해당 process가 사용하는 write system call중 standard output으로의 출력인 경우 모두 buffer의 내용을 NULL로 변경한다' 이 부분에 관련해서 질문이 있습니다.

먼저 ptrace(PTRACE_POKEDATA, child, regs.rsi, data) 를 사용하여 data가 가리키는 내용을 write가 출력하도록 수정해 보았는데요, 저번 실습시간에서의 결과처럼 글자가 깨져서 나오는 문제가 있습니다.

image

그래서 아래 그림과 같이 process_vm_writev를 사용하도록 바꿔보았는데요,

image

이제는 buffer의 내용 자체가 변경이 되지 않습니다. 이는 아래 스크린샷에서 확인할 수 있구요. (원래 버퍼의 내용이 Hello입니다)

image

process_vm_writev 대신 process_vm_readv를 사용하여 buffer의 내용을 읽어오는 것은 제대로 동작하는 것을 확인했는데, buffer에 다른 내용을 쓰는 것이 안되는 것을 보니 혹시 buffer를 가리키는 포인터가 const char * 타입인 것과 관련이 있지 않는지 궁금합니다. 아니면 제가 잘못하고 있는 점이 있으면 지적 부탁드립니다.

감사합니다.

Dalvik VM 을 수정할 때 portable mode 추천

이번 과제를 진행할 때, Dalvik VM 을 직접 수정하시는 분도 있을 것이라 생각됩니다. Dalvik VM 은 fast (어셈블리로 구현) / portable (C function 으로 구현) 두가지 모드로 동작합니다. 어셈블리보다 C 가 더 편하시다면, portable mode 에서 구현을 진행하시는 것을 추천드립니다. default 로 기기 / 에뮬레이터는 fast mode 에서 동작하게 되어있으므로, portable mode 의 코드를 기기에서 동작시키기 위해서는 옵션을 바꿔줘야 합니다.

기기가 portable mode 로 동작하도록 옵션을 바꾸는 두가지 방법 - 동적설정 / image 에 하드 코딩 - 을 공유합니다.

1. Dynamic setting

  • When the portable interpreter is needed, this can be controlled with the dalvik.vm.execution-mode system property with the following instructions.
adb shell setprop dalvik.vm.execution-mode int:portable
adb shell getprop dalvik.vm.execution-mode

After runing setprop instruction, you need to restart Zygote process(adb shell stop;adb shell start).

2. Hardcoding in the system image
You can use portable mode by hard coding in the system image. For this, you need to instrument this one line code executionMode = kEMIntPortable; in the method startVm() of the framework/base/core/jni/AndroidRuntime.cpp.

System Call 구분 질문

프로그램이 실행될 때 기본적으로 하는 open("/lib/x86_64-linux-gnu/libc.so.6") 같은 작업들이 있는데, 이런 작업과 사용자의 파일 조작을 어떻게 구분할 수 있을까요?
그리고 #7 을 이제 확인했는데 저는 왜인지 모르겠지만 시스템 콜 조작에 성공했는데 이전 스펙으로 제출해도 상관없나요.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.