示例#1
0
    def RenderAjax(self, request, response):
        """Handle the upload via ajax."""
        try:
            self.uploaded_file = request.FILES.items()[0][1]
            self.dest_path, aff4_type = self.GetFilePath(request)

            content = StringIO.StringIO()
            for chunk in self.uploaded_file.chunks():
                content.write(chunk)

            if aff4_type == "GRRMemoryDriver":
                # TODO(user): Add support for driver parameters.
                self.dest_path = maintenance_utils.UploadSignedDriverBlob(
                    content.getvalue(),
                    aff4_path=self.dest_path,
                    token=request.token)
            else:
                self.dest_path = maintenance_utils.UploadSignedConfigBlob(
                    content.getvalue(),
                    aff4_path=self.dest_path,
                    token=request.token)

            return renderers.TemplateRenderer.Layout(self, request, response,
                                                     self.success_template)
        except (IOError) as e:
            self.error = "Could not write file to database %s" % e
        except (IndexError) as e:
            self.error = "No file provided."
        except message.DecodeError as e:
            self.error = (
                "Could not decode driver. This should be a signed protobuf"
                " generated with sign_blob")
        return renderers.TemplateRenderer.Layout(self, request, response,
                                                 self.error_template)
示例#2
0
def LoadMemoryDrivers(grr_dir):
  """Load memory drivers from disk to database."""
  for client_context in [["Platform:Darwin", "Arch:amd64"],
                         ["Platform:Windows", "Arch:i386"],
                         ["Platform:Windows", "Arch:amd64"]]:
    file_paths = config_lib.CONFIG.Get(
        "MemoryDriver.driver_files", context=client_context)
    aff4_paths = config_lib.CONFIG.Get(
        "MemoryDriver.aff4_paths", context=client_context)
    if len(file_paths) != len(aff4_paths):
      print "Length mismatch:"
      print "%s.", file_paths
      print "%s.", aff4_paths
      raise RuntimeError("Could not find all files/aff4 paths.")

    for file_path, aff4_path in zip(file_paths, aff4_paths):
      f_path = os.path.join(grr_dir, file_path)
      print "Signing and uploading %s to %s" % (f_path, aff4_path)
      up_path = maintenance_utils.UploadSignedDriverBlob(
          open(f_path).read(), aff4_path=aff4_path,
          client_context=client_context)
      print "uploaded %s" % up_path
示例#3
0
    def testInstallDriver(self):
        for driver_path in self.drivers:
            print "Attempting to load %s" % driver_path
            client_context = ["Platform:Darwin"]
            # Make sure there is a signed driver for our client.
            vfs_path = maintenance_utils.UploadSignedDriverBlob(
                open(driver_path).read(),
                client_context=client_context,
                token=self.token)

            fd = aff4.FACTORY.Create(vfs_path,
                                     "GRRMemoryDriver",
                                     mode="r",
                                     token=self.token)
            self.blob = fd.Get(fd.Schema.BINARY)

            request = rdfvalue.DriverInstallTemplate(driver=self.blob,
                                                     write_path=None,
                                                     force_reload=0)
            osx.client_utils_osx.InstallDriver(
                mox.Func(lambda x: x.endswith(".kext")))
            self.mox.ReplayAll()
            self.RunAction("InstallDriver", request)
            self.mox.VerifyAll()
示例#4
0
        uploaded = maintenance_utils.UploadSignedConfigBlob(
            content, aff4_path=dest_path, client_context=context, token=token)

        print "Uploaded to %s" % dest_path

    elif flags.FLAGS.subparser_name == "upload_memory_driver":
        client_context = [
            "Platform:%s" % flags.FLAGS.platform.title(),
            "Arch:%s" % flags.FLAGS.arch
        ]
        content = open(flags.FLAGS.file).read(1024 * 1024 * 30)

        if flags.FLAGS.dest_path:
            uploaded = maintenance_utils.UploadSignedDriverBlob(
                content,
                aff4_path=flags.FLAGS.dest_path,
                client_context=client_context,
                token=token)

        else:
            uploaded = maintenance_utils.UploadSignedDriverBlob(
                content, client_context=client_context, token=token)

        print "Uploaded to %s" % uploaded

    elif flags.FLAGS.subparser_name == "set_var":
        config = config_lib.CONFIG
        print "Setting %s to %s" % (flags.FLAGS.var, flags.FLAGS.val)
        if flags.FLAGS.val.startswith("["):  # Allow setting of basic lists.
            flags.FLAGS.val = flags.FLAGS.val[1:-1].split(",")
        config.Set(flags.FLAGS.var, flags.FLAGS.val)