The absolute simplest will be dd on the terminal. It is available on pretty much every distro or unix-like OS. No need for any special software or worrying about DRM. The command is not complex enough for that to matter. It just makes bit-wise copies of the in-file to the out-file.
Here's an example:
dd if=/dev/sr0 of=/mnt/data/backups/Fugazi-Repeater.iso bs=64k conv=noerror,sync
What does this do?
if: Specifies the input file (the device should generally not be mounted but r/o storage like CDs isn't likely to be problematic though might see fighting for I/O)
of: Specifies the output file
bs: Specifies the block size for the operation. There's room to play with this value to optimize things
conv: Specifies conversion symbols and flags. In this example, it is just specifying that dd should ignore errors when reading and fill in any gaps in the output file with NULL in order to maintain the data positioning (some DRM has used intentional read errors for copy protection).
dd is a super useful tool for all kinds of things too. It can be used for imaging an SD card for a Raspberry Pi, testing IOPS, creating test data files (where size but not content are relevant), imaging bad disks to attempt data recovery, and a ton of other things. Here's a man page: