1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình an toàn: Chương 2 - Lương Ánh Hoàng

17 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 4 MB

Nội dung

Bài giảng Lập trình an toàn - Chương 2: Kiểm soát truy nhập trình bày các nội dung: Cơ chế kiểm soát truy nhập trên Unix/Linux, cơ chế kiểm soát truy nhập trên Windows, hạ thấp quyền truy nhập của tiến trình, xóa file an toàn, hạn chế quyền truy nhập trên file, khóa file, tạo file tạm, hạn chế truy nhập hệ thống file. Mời các bạn cùng tham khảo.

Chương  2  Kiểm  soát  truy  nhập   Access  Control   Lương  Ánh  Hoàng   hoangla@soict.hut.edu.vn   Nội  dung   2.1  Cơ  chế  kiểm  soát  truy  nhập  trên  Unix/Linux   2.2  Cơ  chế  kiểm  soát  truy  nhập  trên  Windows   2.3  Hạ  thấp  quyền  truy  nhập  của  tiến  trình   2.4  Xóa  }ile  an  tồn   2.5  Hạn  chế  quyền  truy  nhập  trên  }ile   2.6  Khóa  }ile   2.7  Tạo  }ile  tạm   2.8  Hạn  chế  truy  nhập  đến  hệ  thống  }ile     30   2.1  Cơ  chế  kiểm  sốt  truy  nhập  trên  Unix/ Linux   •  Trên  Unix/Linux  tất  cả  các  tài  nguyên  đều  được  coi  là  }ile:  tệp  tin,  ổ  đĩa,    nhớ,  thiết  bị…   •  Mỗi  }ile  kiểm  sốt  bởi  user  id  và  group  id   •  Mỗi  tiến  trình  có  ba  quyền:  effective  user  id,  real  user  id,  saved  user  id   Effective  user  id  được  sử  dụng  trong  phần  lớn  các  kiểm  tra     •  Mỗi  tiến  trình  cũng  thuộc  về  ba  nhóm:  effective  group  id,  real  group  id,   saved  group  id   •  Có  ba  loại  quyền   •  Đọc  (read)   •  Ghi  (write)   •  Thực  thi  (execute)   31   2.1  Cơ  chế  kiểm  soát  truy  nhập  trên  Unix/ Linux   •  Mỗi  }ile  sẽ  có  ba  nhóm  quyền  tương  ứng  với:  user  id,  group  id,  và   other   -­‐rwxr-­‐xr-­‐x  1    Luong  Anh  Hoang    None    17964    Aug  28  23:45  test.exe   •  Khi  tiến  trình  tạo  một  }ile  hoặc  tài  nguyên,  hệ  thống  sẽ  gán  user  id  và   group  id  cho  }ile  mới  đó  bằng  effective  user  id  và  effective  group  id  của   tiến  trình   •  Khi  tiến  trình  truy  nhập  một  }ile  hoặc  tài  nguyên,  hệ  thống  sẽ  lần  lượt   so  sánh  user  id,  group  id  của  tiến  trình  và  }ile  và  chọn  ra  tập  quyền   tương  ứng  Nếu  khơng  khớp  thì  lớp  quyền  thứ  3  sẽ  được  sử  dụng   32   2.1  Cơ  chế  kiểm  soát  truy  nhập  trên  Unix/ Linux   •  Mỗi  }ile  cũng  có  thể  có  3  bit  đặc  biệt   •  Sticky  Nếu  bit  này  được  thiết  lập,  người  dùng  sẽ  khơng  thể  xóa  hay  đổi  tên   }ile  của  người  khác  nằm  trong  thưc  mục  mà  người  dùng  quản  lý  Mặc  định    khơng  được  thiết  lập   •  Setuid:  Bit  này  liên  quan  đến  quá  trình  tạo  một  tiến  trình  mới  Nếu  bit  này    thiết  lập,  tiến  trình  được  tạo  từ  }ile  này  sẽ  khơng  kế  thừa  quyền  từ   tiến  trình  cha,  mà  sẽ  có  quyền  từ  user  id  của  chính  }ile  đó   •  Setgid:     •  Đối  với  }ile  thực  thi,  nếu  bit  này  được  thiết  lập  thì  một  tiến  trình  mới    tạo  sẽ  có  quyền  từ  groupd  id  của  }ile  đó  chứ  khơng  kế  thừa  từ   tiến  trình  cha  (tương  tự  Setuid)   •  Đối  với  thưc  mục,  nếu  bit  này  được  thiết  lập  thì  các  }ile  tạo  trong  thư   mục  này  sẽ  có  groupd  id  của  thư  mục  cha,  chứ  không  kế  thừa  từ  tiến   trình  tạo  ra  }ile  đó   33   2.2  Cơ  chế  kiểm  soát  truy  nhập  trên   Windows   •  Windows  sử  dụng  ACL:  Access  Control  List  để  phân  quyền  tài   nguyên   •  Các  tài  nguyên  của  Windows:  }ile,  registry,  mutex,  event,  IPC…    kiểm  sốt  thơng  qua  DACL  và  SACL   •  DACL  là  danh  sách  các  ACE,  mỗi  ACE  là  một  luật  quy  định  một   quyền  hạn  cụ  thể   •  DACL  rỗng  tương  đương  với  việc  tất  cả  mọi  người  có  tồn  quyền   truy  nhập  tới  đối  tượng   •  Mỗi  ACE  bao  gồm  3  thơng  tin:     •  SID:  Đại  diện  cho  một  user  hay  một  group  trong  hệ  thống   •  Quyền  truy  nhập   •  Giá  trị  boolean  tương  ứng  với  cho  phép  hay  không  cho  phép   34   2.2  Cơ  chế  kiểm  soát  truy  nhập  trên   Windows   •  Các  quyền  truy  nhập     TÊN   Diễn  giải   DELETE   The  ability  to  delete  the  object   READ_CONTROL   The  ability  to  read  the  object's  security   descriptor,  not  including  its  SACL   SYNCHRONIZE   The  ability  for  a  thread  to  wait  for  the  object   to  be  put  into  the  signaled  state;  not  all   objects  support  this  functionality   WRITE_DAC   The  ability  to  modify  the  object's  DACL   WRITE_OWNER   The  ability  to  set  the  object's  owner   GENERIC_READ   The  ability  to  read  from  or  query  the  object   GENERIC_WRITE   The  ability  to  write  to  or  modify  the  object   GENERIC_EXECUTE   The  ability  to  execute  the  object  (applies   primarily  to  }iles)   GENERIC_ALL   Full  control   35   2.2  Cơ  chế  kiểm  soát  truy  nhập  trên   Windows   •  Ví  dụ  ACE   •  DENY            GENERIC_ALL                  Everyone:  Cấm  mọi  quyền  với  group  Everyone   •  ALLOW    GENERIC_WRITE      Marketing:  Cho  phép  nhóm  group  Marketing    quyền  ghi   •  Mỗi  đối  tượng  đều  có  một  Owner,  chính  là  người  tạo  ra  đối   tượng   •  Owner  có  tồn  quyền  với  đối  tượng  bất  kể  trong  DACL  có  cấm   hay  khơng   •  Owner  có  thể  bị  chiếm  bởi  user  khác     36   2.3  Hạ  thấp  quyền  truy  nhập  của  tiến  trình   •  Nếu  một  tiến  trình  có  đặc  quyền  cao,  thực  hiện  các  thao  tác  nguy  hiểm   =>  cần  hạ  thấp  quyền  trước  khi  thực  hiện   •  Tiến  trình  có  thể  kiểm  tra  real  user  id,  real  group  id  bằng  lệnh  getuid  (),   getgid()  Đây  là  các  đặc  quyền  kế  thừa  từ  tiến  trình  cha   •  Tiến  trình  có  thể  kiểm  tra  effective  user  id  và  effective  group  id  bằng   lệnh  geteuid()  và  getegid()  Đây  thường  là  user  id  có  đặc  quyền  cao    (do  được  khởi  chạy  từ  super  user,  hoặc  các  bit  setuid  được  bật)   •  Tiến  trình  từ  bỏ  đặc  quyền  bằng  việc  thiết  lập  group  mới  chính  là  real   user  id  qua  lệnh     •  setgroups():  Thiết  lập  lại  nhóm  của  tiến  trình     •  setegid():  Thiết  lập  lại  effective  group  id  của  tiến  trình   •  seteuid():  Thiết  lập  lại  effective  user  id  của  tiến  trình     37   2.4  Xóa  qile  an  tồn   •  Thơng  thường,  một  }ile  sau  khi  xóa  sẽ  được  hệ  điều  hành  đánh  dấu  là   xóa,  nội  dung  chưa  hồn  tồn  bị  loại  bỏ  trên  đĩa   •  Giải  pháp   •  •  •  •  Ghi  đè  thơng  tin  khác  nhiều  lần  lên  đĩa   Ghi  đè  dữ  liệu  ngâu  nhiên  nhiều  lần  lên  đĩa   Ghi  đè  sử  dụng  mẫu  định  sẵn  lên  đĩa   Sau  mỗi  chu  kỳ  ghi,  sử  dụng  fsync  để  đồng  bộ  với  đĩa,  vơ  hiệu  hóa  cơ  chế   cache  Hoặc  lệnh  f}lush()  nếu  sử  dụng  thư  viện  C   •  Một  vài  mẫu  được  sử  dụng   •  static  unsigned  char  single_pats[16]  =  {  0x00,  0x11,  0x22,  0x33,  0x44,   0x55,  0x66,  0x77,  0x88,  0x99,  0xaa,  0xbb,  0xcc,  0xdd,  0xee,  0xff  };     •  static  unsigned  char  triple_pats[6][3]  =  {  {  0x92,  0x49,  0x24  },  {  0x49,  0x24,   0x92  },  {  0x24,  0x92,  0x49  },  {  0x6d,  0xb6,  0xdb  },  {  0xb6,  0xdb,  0x6d  },   {  0xdb,  0x6d,  0xb6  }  };       38   2.5  Hạn  chế  quyền  truy  nhập  trên  qile   •  Unix/Linux  sử  dụng  umask  cho  mỗi  tiến  trình  để  vơ  hiệu  hóa  một  vài   bit  khi  tiến  trình  tạo  }ile   •  Hàm  fopen,  open  ln  ln  tạo  }ile  với  quyền  666   •  Giả  sử  tiến  trình  muốn  tạo  }ile  với  quyền  666:   requested_permissions  =  0666;     actual_permissions  =  requested_permissions  &  ~umask(  );   •  Ứng  dụng  thay  đổi  umask  bằng  hàm  umask()  trước  khi  thực  hiện  lời   gọi  tạo  }ile     #include     #include       mode_t    umask(mode_t        mask);     39   2.6  Khóa  qile   •  Tiến  trình  muốn  kiểm  soát  truy  nhập  trên  một  phần  của  }ile  hay  toàn    }ile  để  tránh  xung  đột  khi  có  nhiều  tiến  trình  cùng  truy    nhập  trên   }ile   •  Unix/Linux  cung  cấp  cơ  chế  khóa  mềm:  Mọi  tiến  trình  đều  có  quyền   giành  được  khóa  và  thao  tác  trên  }ile,  tuy  nhiên  khơng  phải  tiến  trình    cũng  tn  thủ  theo  khóa  và  có  thể  phá  hỏng  dữ  liệu  của  tiến  trình   khác   •  Windows  thực  hiện  vấn  đề  này  tốt  hơn  bằng  khóa  cứng  Có  hai  loại   khóa:   •  Shared  Lock:  Cho  phép  các  tiến  trình  khác  (kể  cả  tiến  trình  giành  được   khóa)  đọc  nhưng  khơng  được  ghi  vào  một  phần  đã  khóa  của  }ile     •  Exclusive  Lock  :  Cấm  tất  cả  các  tiến  trình  khác  khơng  được  đọc  hay  ghi  vào   phần  đã  khóa  của  }ile  Tiến  trình  giành  được  khóa  có  quyền  đọc  hoặc  ghi   vào  }ile         40   2.6  Khóa  qile   •  Các  hàm  khóa  }ile  trên  Windows   •  LockFile,  UnlockFile:  Khóa  và  mở  khóa  đồng  bộ,  sẽ  không  trở  về  đến  khi   giành  được  khóa  hoặc  mở  được  khóa   •  LockFileEx,  UnlockFileEx:  Khóa  và  mở  khóa  đồng  bộ  hoặc  bất  đồng  bộ   •  Khóa  }ile  cũng  có  thể  xác  định  lúc  tạo  lập/truy  nhập  }ile  thông  qua  hàm   CreateFile   •  Đoạn  chương  trình  sau  sẽ  mở  một  }ile  để  đọc  với  chế  độ  Shared  Lock    char  buff[1024];    DWORD  bytesRead  =  0;    HANDLE  fileHandle  =  NULL;    fileHandle  =  CreateFile(L"C:\\SecureProgramming\\Test.txt",          GENERIC_READ|GENERIC_WRITE,          FILE_SHARE_READ|FILE_SHARE_WRITE,          0,          OPEN_ALWAYS,          FILE_ATTRIBUTE_NORMAL,          0);       41   2.6  Khóa  qile   •  VD  (tiếp)    ReadFile(fileHandle,buff,128,&bytesRead,0);    buff[bytesRead]  =  0;    printf("File  content:%s\n",buff);    LockFile(fileHandle,0,0,100,0);  //  Exclusive  Lock    printf("File  is  locked,  press  any  key  to  unlock \n");      getch();    UnlockFile(fileHandle,0,0,100,0);    printf("File  is  unlocked\n");    getch();    CloseHandle(fileHandle);       42   2.7  Tạo  qile  tạm   •  Ứng  dụng  tạo  }ile  tạm  để  lưu  trữ  thông  tin  tạm  thời  của  chương  trình   •  File  tạm  nên  được  tạo  lập  một  cách  an  tồn,  và  xóa  khi  kết  thúc  chương   trình   •  Trên  unix/linux:   •  Hàm  mkstemp()  có  thể  sử  dụng  để  tạo  }ile  tạm  với  tên  ngẫu  nhiên   •  Ứng  dụng  cần  xóa  }ile  theo  tên,  ngay  sau  lời  gọi  mkstemp  để  đảm  bảo  khơng  tiến   trình  nào  truy  nhập  được   •  Sau  khi  tiến  trình  kết  thúc  một  cách  bình  thường/khơng  bình  thường,  }ile  tạm  sẽ   khơng  thể  truy  nhập  được  nữa   •  VD    char    szPath[]  =  “fileXXXXXX";    int  fd;      fd  =  mkstemp(szPath);    unlink(szPath);    printf("Temperary  file  created,  press  any  key  to  continue ");    write(fd,"Hello",5);    close(fd);   43   2.7  Tạo  qile  tạm   •  Trên  Windows:   Khơng  có  hàm  tương  đương  mkstemp()   GetTempFileName()  sinh  tên  }ile  ngẫu  nhiên  nhưng  dễ  đoán   GetTempPath()  lấy  đường  dẫn  đến  thư  mục  tạm  của  người  dùng  hiện  tại   Tạo  }ile  bằng  hàm  CreateFile  với  hai  thuộc  tính  FILE_ATTRIBUTE_TEMPORARY  và   FILE_FLAG_DELETE_ON_CLOSE   •  VD   HANDLE  }ileHandle  =  NULL;   }ileHandle  =  CreateFile(L"C:\\SecureProgramming\\Tmp.txt",      GENERIC_READ|GENERIC_WRITE,      FILE_SHARE_READ|FILE_SHARE_WRITE,      0,      OPEN_ALWAYS,        FILE_ATTRIBUTE_TEMPORARY|    FILE_FLAG_DELETE_ON_CLOSE,          0);           44       •  •  •  •  2.8  Hạn  chế  truy  nhập  đến  hệ  thống  qile   •  Trên  Unix/Linux,  ứng  dụng  có  thể  tự  giới  hạn  phạm  vi  truy  nhập  hệ   thống  tệp  tin  của  mình  bằng  lệnh  chroot()   •  Sau  khi  gọi  chroot():   •  Tiến  trình  không  thể  mở  rộng  phạm  vi  truy  nhập  bằng  lệnh  chroot  lần  nữa   •  Tiến  trình  chỉ  có  thể  thu  hẹp  hơn  nữa  phạm  vi  truy  nhập  của  mình   •  Tiến  trình  phải  chủ  động  gọi  thêm  chdir()  để  lệnh  chroot  có  hiệu  lực   •  VD:    #include      chroot("/new/root/directory");    chdir("/");                 45   ... 2. 1  Cơ  chế  kiểm  soát  truy  nhập  trên  Unix/Linux   2. 2  Cơ  chế  kiểm  soát  truy  nhập  trên  Windows   2. 3  Hạ  thấp  quyền  truy  nhập  của  tiến ? ?trình   2. 4  Xóa  }ile ? ?an  tồn   2. 5... 2. 1  Cơ  chế  kiểm  soát  truy  nhập  trên  Unix/ Linux   •  Mỗi  }ile  sẽ  có  ba  nhóm  quyền  tương  ứng  với:  user  id,  group  id,  và   other   -? ?‐rwxr-­‐xr-­‐x  1    Luong  Anh  Hoang...  Mặc  định    không  được  thiết ? ?lập   •  Setuid:  Bit  này  liên  quan  đến  quá ? ?trình  tạo  một  tiến ? ?trình  mới  Nếu  bit  này    thiết ? ?lập,  tiến ? ?trình  được  tạo  từ  }ile  này  sẽ

Ngày đăng: 08/05/2021, 14:18

TỪ KHÓA LIÊN QUAN