strace 에 대해서 자세히 아시는분

declspec의 이미지

리눅스에서 strace 를 하면
인풋으로 준 프로그램의 시스템콜을 추적합니다

질문1. 그런데 setuid 가 걸린 프로그램을 인풋으로 주게되면
setuid 걸린게 무시된것처럼 됩니다. 왜이러는건가요?
예를들어 a 라는 프로그램은 getuid, geteuid, getgid 를 호출해서
각각결과를 보여주는 프로그램인데 여기에 setuid 가 걸려있습니다.
이걸 실행하면 euid 가 다르게 나와야합니다(파일 오너와 실행자가 다를때)
그런데 strace 를 사용해서 a 를 실행시키면 uid, euid 가 같게 나타납니다(setuid 가 무시됨)
왜이런 결과가 나오나요?

질문2. strace 에게 a 라는 프로그램을 입력으로 주면
strace 는 내부적으로 어떤일을 하는건가요?
execve 같은거로 a 를 실행시키는건가요?
어떤원리로 a 의 시스템콜들을 추적할수 있는건가요?

질문3. 그러고보니 gdb 는 또한 프로그램을 디버깅하기위해서
어떤과정을 거치나요? 핵심적으로 사용하는 시스템콜이 있나요?
strace 와 gdb 가 인풋으로 받은 프로그램을 다루는 방식은 어떻게 다른가요?

질문이 폭발하네요 -_-;
너무 궁금합니다 누가 자세히 설명좀 해주세요~~

Stand Alone Complex의 이미지

직접 strace와 gdb 소스와 문서를 보세요.

RET ;My life :P

익명 사용자의 이미지

시간이 남아도냐?

jachin의 이미지

왜 익명으로 글을 쓰시게 되면 함부로 글을 쓰시는지 모르겠습니다.

설마 계정을 가지고 계신 분들께서, 익명으로 글을 쓰시면 이렇게 글을 쓰시게 되는 걸까요?

무책임한 답변이나, 성의 없는 답변은 있을 수 있지만,

일부러 욕하시라고 익명 기능을 허용하고 있는 것은 아니라고 생각합니다.

tkdlvk27의 이미지

1.
strace로 a라는 파일을 디버깅하게 되면, 실제로 a라는 프로그램을 실행시킨것이 아니라 strace라는 프로그램에서 새로운 프로세스를 생성해서 a라는 프로그램을 exec-계열 시스템콜로 실행시키는것입니다.

리눅스는 보안을 이유로 이러한 실행경로에 대해서는 setuid가 걸려있더라도 사용자 권한을 얻지 못하도록 되어있기 때문에, setuid가 걸린 프로그램을 strace로 실행하게 되면 uid, euid가 같아지게 되는것입니다.
(만약 특정 프로세스가 exec-계열로 setuid가 걸린 프로그램을 실행시켰을때, 실행하고자 하는 프로그램의 uid로 전환되게 된다면 심각한 보안문제가 발생하겠지요?)

2.
gdb나 trace계열의 LEF 분석프로그램들은 디버깅 하고자하는 프로그램이 저장된 하드에서 정보를 읽어와서 디버깅 하는것이 아니라, 직접 프로그램을 실행시켜 메모리에 올라온 프로그램을 분석하여 정보를 얻어내는 프로그램입니다.
보안전문가로 유명한 hkpco분이 'read 권한이 없고 실행권한만 있는 프로그램'을 복사할 수 있게하는 프로그램을 만드셨는데 이 원리도 메모리에 프로그램을 올려 그 정보를 가져와서 파일을 복사하는 방식입니다. 이정도면 이해하셨을거라 생각해요.

2번 답변으로 3번질문 역시 해결하셨을거라 생각합니당~

참고: http://hkpco.kr/paper/hktrace_by_hkpco.pdf

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.